websecret / laravel-search
Laravel Eloquent 模型与 Elasticsearch 2
Requires
- php: >=5.5
- elasticsearch/elasticsearch: 2.*
- illuminate/config: ^5.0
- illuminate/database: ^5.0
- illuminate/support: ^5.0
This package is not auto-updated.
Last update: 2024-09-14 18:36:51 UTC
README
Laravel Eloquent 模型与 Elasticsearch 2
安装和需求
首先,您需要使用 Composer 安装该包
composer require websecret/laravel-search
之后,从命令行运行 composer update
。
然后,通过添加服务提供者条目来更新 config/app.php
。
'providers' => [ // ... Websecret\LaravelSearchable\SearchableServiceProvider::class, ];
最后,再次从命令行运行 php artisan vendor:publish --provider=Websecret\LaravelSearchable\SearchableServiceProvider
以发布默认配置文件。
更新您的 Eloquent 模型
您的模型应该实现 Searchable 的接口并使用其特质。您还应该定义一个受保护的属性 $searchable
,其中包含任何模型特定的配置(有关详细信息,请参阅下方的 配置)
use Websecret\LaravelSearchable\SearchableTrait; use Websecret\LaravelSearchable\SearchableInterface; class Article extends Model implements SearchableInterface { use SearchableTrait; protected $searchable = [ //'index' => 'domain_name', //'type' => 'articles', 'fields' => [ 'title' => [ 'weight' => 3, ], 'content', 'category.title' => [ 'title' => 'category', 'weight' => 1, ], ], //"fuzziness" => "AUTO", //"prefix_length"=> 2, //"max_expansions"=> 100, ]; }
搜索
使用 search
范围来查找模型。结果集合将按分数排序。
$articles = Article::where('is_active', 1)->search('apple')->get();
索引
模型在 updated
、created
和 deleted
事件上自动索引。您可以使用 $article->searchIndex();
和 $article->searchDelete();
来手动索引或从索引中删除。使用 Article::searchDeleteAll()
通过指定模型清除所有索引。
配置
模糊度
模糊匹配将“模糊”相似的两个词视为相同的词。
当然,单个编辑对字符串的影响取决于字符串的长度。对单词 hat 的两个编辑可以产生 mad,因此对长度为 3 的字符串进行两个编辑是过度的。模糊度参数可以设置为 AUTO,这将产生以下最大编辑距离:
0
对于一个或两个字符的字符串1
对于三个、四个或五个字符的字符串2
对于五个以上字符的字符串
当然,您可能会发现编辑距离为 2 仍然是过度的,返回的结果似乎没有相关性。您可能通过最大模糊度为 1 得到更好的结果和更好的性能。
前缀长度
不会进行“模糊化”的前置字符数。这有助于减少必须检查的术语数量。
最大扩展数
模糊查询将扩展到的最大术语数。