intracto / elastic-synonym
更新和刷新elasticsearch同义词
1.0.0
2021-09-15 19:20 UTC
Requires
- php: >=7.1.3
- symfony/http-client-contracts: ^2.4
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', ]]];