基于Elasticsearch自定义文件的分析器

时间:2019-04-02 18:58:54

标签: elasticsearch

我正在使用Elasticsearch 6,并且索引中有一个全文本字段。此字段存储产品类别,并且只能采用少数几个可能的值之一(例如水果,多叶蔬菜等)。我想使用文件中指定的标记以自定义方式分析字段。
例如

新鲜水果-> [水果,新鲜水果]

是否可以使用自定义分析器以及来自映射文件的最终令牌,如上所述。

1 个答案:

答案 0 :(得分:0)

您要寻找的是synonym token filter。您需要创建一个使用此过滤器的自定义分析器,以便当输入字符串为ImageViewfresh fruit时,它会生成单个令牌fruit。您可以通过在索引设置中定义分析来实现。创建一个使用过滤器的自定义分析器,然后将该分析器应用于fruit字段,如下所示:

category

现在,当您使用PUT my_index { "settings": { "index": { "analysis": { "analyzer": { "my_synonym_analyzer": { "tokenizer": "standard", "filter": [ "lowercase", "custom_synonym" ] } }, "filter": { "custom_synonym": { "type": "synonym", "synonyms": [ "fresh fruit, fruit => fruit" ], //"synonyms_path": "analysis/synonyms.txt" <---- replace "synonyms" above with this to use file instead of array of synonyms } } } } }, "mappings": { "_doc": { "properties": { "category": { "type": "text", "analyzer": "my_synonym_analyzer" } } } } } fruit针对fresh fruit的{​​{1}}字段文档搜索categoryfruit时,将匹配。这是因为默认情况下,当针对字段进行搜索时,弹性搜索对在索引上应用于字段的搜索字符串使用相同的分析器,在这种情况下,这最终会归结为fresh fruit(在两种情况下,{{1 }}或fruit),因此文档将匹配。