intracto/elastic-synonym

更新和刷新elasticsearch同义词

1.0.0 2021-09-15 19:20 UTC

This package is auto-updated.

Last update: 2024-09-23 02:13:07 UTC


README

此库读取/写入elasticsearch同义词,并将它们转换为可编辑的对象数组。您可以在需要使更新的同义词对用户可用时随时调用刷新操作。

请参阅intracto/elastic-synonym-bundle,了解使用bootstrap在symfony 4.4+上的即插即用实现。

注意:请确保您使用的是支持分析查询的查询,例如常规匹配过滤器(以下为示例)。

其他要求

  • Elasticsearch 7.3+
  • 同义词过滤器必须应用于搜索分析器。它不适用于索引分析器

安装

$ composer require intracto/elastic_synonym

文件系统上的同义词文件

我们需要解决一些限制

  • Elasticsearch 会读取当前配置文件所在的位置(通常为/etc/elasticsearch
  • 文件系统上的web用户可能没有权限写入所需目录。

这就是我们选择使用符号链接的原因。这也可以按您的要求实现,但这里是一个使用vagrant的工作示例

$ mkdir /vagrant/.elastic-synonym
$ touch /vagrant/.elastic-synonym/synonyms.txt # name the file anyway you want

$ sudo ln -s /vagrant/.elastic-synonym /etc/elasticsearch/analytics

elastic中的同义词过滤器

settings.analysis.filter下添加以下过滤器

'my_synonyms' => [ // a name for your filter
    'type' => 'synonym_graph',
    'synonyms_path' => 'analytics/synonyms.txt', // This needs to be the path inside /etc/elastic.
    'updateable' => true, // *must* be true
],

如果您想将其添加到默认搜索分析器,请在settings.analysis.analyzer下添加以下设置

'default_search' => [
    // ..
    'filter' => [/*'..', */'my_synonyms'],
],

简单示例(假设您使用默认设置并已将过滤器添加到默认_search)

$body['query']['bool']['should'][] = ['match' => ['description' => [
    'query' => 'this is an example',
    'fuzziness' => 'AUTO',
    'operator' => 'OR',
]]];