我正在使用Elasticsearch 6,并且索引中有一个全文本字段。此字段存储产品类别,并且只能采用少数几个可能的值之一(例如水果,多叶蔬菜等)。我想使用文件中指定的标记以自定义方式分析字段。
例如
新鲜水果-> [水果,新鲜水果]
是否可以使用自定义分析器以及来自映射文件的最终令牌,如上所述。
答案 0 :(得分:0)
您要寻找的是synonym token filter。您需要创建一个使用此过滤器的自定义分析器,以便当输入字符串为ImageView
或fresh 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}}字段文档搜索category
或fruit
时,将匹配。这是因为默认情况下,当针对字段进行搜索时,弹性搜索对在索引上应用于字段的搜索字符串使用相同的分析器,在这种情况下,这最终会归结为fresh fruit
(在两种情况下,{{1 }}或fruit
),因此文档将匹配。