Coder Social home page Coder Social logo

searchable's Introduction

Searchable

Searchable trait for Laravel Eloquent models.

This trait uses a full text search to search individual models. A results collection is provided to help sort multiple model searches by relevance.

Installation

Add the following to the composer.json file in your project:

"chriswillerton/searchable": "1.*"

or you can run the below on the command line in the root of your project:

composer require "chriswillerton/searchable" "1.*"

Setup

To get started, add the trait to the model:

use ChrisWillerton\Searchable\Searchable;

class YourModel extends Eloquent
{
	use Searchable;

	protected $full_text_index = 'title, content';

You also need to define the full text index that you've setup in your database. Add this as a property on your model called $full_text_index.

Usage

You can use searchable as below:

$results = YourModel::search('search term')
	->orderBy('relevance', 'desc')
	->get();

The collection is used for collecting multiple model search results together and making it easy to sort the whole collection by relevance. Imagine you have an Article, Post, and Product class, but you want results from all of these mixed together and sorted by relevance. You could do something like the below:

// Set which models we wish to search
$models_to_search = [
	Article::class,
	Post::class,
	Product::class
];

$term = 'search term';
$model_results = [];

// Loop through each model and perform the search query
foreach ($models_to_search as $model)
{
	$model_results[] = $model::search($term)
		->get()
		->toArray();
}

// Merge each result set together into a single array of results
$merged_results = array_merge(...$model_results);

// Add these results to a collection...
$collection = new ChrisWillerton\Searchable\SearchableResults($merged_results);

// and order them by relevance
$results = $collection->getByRelevance();

You should consider the performance impact of doing the above though. It's probably best to come up with a specific search solution if maximising performance is required.

searchable's People

Contributors

chriswillerton avatar

Stargazers

Jason Stainton avatar Jamie Sefton avatar Amir Hosseinzadeh avatar

Watchers

 avatar

Forkers

ngangchill

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.