我们有一个分析器,其中包含定义如下的同义词过滤器:
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”,因为这是等效的同义词,但 Elasticsearch 似乎将其视为两次匹配,因为它匹配“wasted”和“time”,并返回两个突出显示:“dawdle”和“company” ".
是否有推荐的方法来解决此类问题,即在突出显示中返回意外的单词,因为它占据了因同义词而插入的搜索词的相同位置?
最佳答案
@SergeyS 你和@user2430530 的情况在 section 中得到了完美的描述。的文档。
并且这里的建议是尝试为每个同义词系列定义一个术语,而不是返回结果中突出显示的术语的混淆。
像这样:
"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"
]
}
关于solr - Elastic Search Highlights 与 Synonym Filter 的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18795869/