websecret / laravel-search

Laravel Eloquent 模型与 Elasticsearch 2

v2.1 2017-06-21 16:35 UTC

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();

索引

模型在 updatedcreateddeleted 事件上自动索引。您可以使用 $article->searchIndex();$article->searchDelete(); 来手动索引或从索引中删除。使用 Article::searchDeleteAll() 通过指定模型清除所有索引。

配置

模糊度

模糊匹配将“模糊”相似的两个词视为相同的词。

当然,单个编辑对字符串的影响取决于字符串的长度。对单词 hat 的两个编辑可以产生 mad,因此对长度为 3 的字符串进行两个编辑是过度的。模糊度参数可以设置为 AUTO,这将产生以下最大编辑距离:

  • 0 对于一个或两个字符的字符串
  • 1 对于三个、四个或五个字符的字符串
  • 2 对于五个以上字符的字符串

当然,您可能会发现编辑距离为 2 仍然是过度的,返回的结果似乎没有相关性。您可能通过最大模糊度为 1 得到更好的结果和更好的性能。

前缀长度

不会进行“模糊化”的前置字符数。这有助于减少必须检查的术语数量。

最大扩展数

模糊查询将扩展到的最大术语数。