wkjagt / searchable
使Laravel模型即时可搜索,并自动使用Elastic Search索引。
Requires
- php: >=5.4.0
- illuminate/database: 4.2.*
- illuminate/support: 4.2.*
Requires (Dev)
- phpspec/phpspec: ~2.0
This package is not auto-updated.
Last update: 2024-09-10 03:14:08 UTC
README
使Laravel模型即时可搜索,并自动使用Elastic Search索引。
进行中
将搜索功能添加到Laravel模型只需使用一个特质。在模型中使用SearchableTrait
将启用一个模型观察器,它会在created
、updated
和deleted
事件上操作,以保持您的索引更新。
特质为您的模型添加了一个search
方法,使得在Elastic Search中搜索命中变得简单。
提供的门面提供了类似的功能,并增加了同时搜索多个文档类型(即模型)的能力。
安装
Composer
在您的composer文件中包含此包,然后运行composer update。
我仍在努力中,但dev-master
将在我准备好一个稳定的标签后更改。
{ "require" : { ... "wkjagt/searchable": "dev-master" } }
服务提供者
将服务提供者添加到您的app.php
'providers' => [ ... 'Searchable\SearchableServiceProvider' ]
可搜索门面
如果您想使用可搜索门面,请将其添加到您的app.php
中的别名
'aliases' => [ ... 'Searchable' => 'Searchable\SearchableFacade' ]
可搜索特质
将SearchableTrait
添加到您要索引的模型中。例如
class Thing extends Model { use SearchableTrait; ... }
这就是开始所需的所有内容。新创建的Thing
模型将自动索引。默认情况下,所有模型都将添加到default
索引中,完全限定的类名将用作文档类型(其中反斜杠将被点替换)。这对于正常使用来说是很好的,但可以通过在您的模型中添加静态属性来修改。
class Thing extends Model { use SearchableTrait; public static $searchDocumentType = 'thing'; public static $searchIndexName = 'my_index'; }
搜索
搜索可以通过两种方式进行。SearchableTrait
为您的模型添加了一个search
方法,它接受一个参数:一个Elastic Search查询。例如
$query = [ 'filtered' => [ 'query' => [ 'match' => [ 'name' => 'some_name' ]], 'filter' => [ 'term' => [ 'user_id' => 14 ]], ]]; $hits = Thing::search($query);
您还可以使用可搜索门面同时搜索多个模型,该门面使用原生Elastic Search方式在多个索引/文档类型中搜索。在Searchable
上的搜索方法接受一个包含模型完全限定类名的数组,并需要链接到withSearch
方法。例如
$query = [ 'filtered' => [ 'query' => [ 'match' => [ 'name' => 'some_name' ]], 'filter' => [ 'term' => [ 'user_id' => 14 ]], ]]; $hits = Searchable::search(['Thing', 'OtherThing'])->withQuery($query);
结果以Searchable\SearchResult
实例数组的格式返回,这些是简单的值对象,具有两个公共属性
hit
:一个填充的Laravel模型score
:搜索分数
索引现有模型
当将Searchable添加到现有项目时,您可能希望索引现有的模型。添加到每个使用SearchableTrait
的模型的searchable:indexall
artisan命令添加了此功能。要为给定模型索引所有资源,请运行该命令,并将完全限定的类名作为参数传递,将任何反斜杠替换为正斜杠
./artisan searchable:indexall Namespace/Of/Your/Model