我们有一个包含同义词过滤器的分析器,其定义如下:
synonym_filter :
type : synonym
synonyms_path : synonyms.txt
ignore_case : true
expand : true
format : solr
在同义词文件中,我们有一个如下定义的同义词:
磨蹭,浪费时间
然后在我们的数据中,我们有一个名为“dawdle company”的实体。
由于同义词过滤器,因此会将其分析为:
1 -dawdle- 2 -company- 3
1 -wasted- 2 -time- 3
随着时间的推移和公司处于同一位置。然后,当执行搜索“浪费时间”时,我们在此实体中获得了一个命中。我们希望亮点是“磨蹭”,因为这是同等的同义词,但似乎弹性搜索认为这是两个点击,因为它匹配“浪费”和“时间”,它返回两个亮点:“dawdle”和“公司”
是否有推荐的方法来解决这些问题,其中高亮区中返回了意外的单词,因为它占据了由于同义词而插入的搜索词的相同位置?
答案 0 :(得分:4)
@SergeyS本文档的section完整描述了您和@ user2430530的情况。
并且建议在每个同义词系列中尝试为单个术语定义一个单词,而不是将结果中突出显示的术语混合起来。
这样的事情:
"analysis": {
"analyzer": {
"synonym": {
"tokenizer": "whitespace",
"filter": [
"synonym"
]
}
},
"filter": {
"synonym": {
"type": "synonym",
"synonyms": [
"dawdle, waste time=>waste_time"
]
}
}
}
然后你将从ES获得所需的结果:
"highlight": {
"text": [
"some <em>dawdle</em> company"
]
}