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