use*_*530 13 lucene solr elasticsearch
我们有一个包含同义词过滤器的分析器,定义如下:
        synonym_filter :
            type : synonym
            synonyms_path : synonyms.txt
            ignore_case : true
            expand : true
            format : solr
Run Code Online (Sandbox Code Playgroud)
在同义词文件中,我们有一个定义如下的同义词:
磨蹭,浪费时间
然后在我们的数据中,我们有一个名为"dawdle company"的实体.
由于同义词过滤器,这被分析为:
1 -dawdle- 2 -company- 3
1 -wasted- 2 -time- 3
Run Code Online (Sandbox Code Playgroud)
随着时间的推移和公司在同一个位置.然后,当执行搜索"浪费时间"时,我们在此实体中获得了一个命中.我们希望亮点是"磨蹭",因为这是同等的同义词,但似乎弹性搜索认为这是两次点击,因为它匹配"浪费"和"时间",它返回两个亮点:"dawdle"和"公司" ".
是否有推荐的方法来解决这些问题,其中突出显示了一个意外的单词,因为它占据了由于同义词而插入的搜索词的相同位置?
@SergeyS 您和@user2430530 的情况在文档的这一部分中得到了完美的描述。
建议尝试为每个同义词系列定义一个术语,以免结果中突出显示的术语混合在一起。
像这样的东西:
"analysis": {
  "analyzer": {
    "synonym": {
      "tokenizer": "whitespace",
      "filter": [
        "synonym"
      ]
    }
  },
  "filter": {
    "synonym": {
      "type": "synonym",
      "synonyms": [
        "dawdle, waste time=>waste_time"
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)
然后你会从ES得到想要的结果:
        "highlight": {
           "text": [
              "some <em>dawdle</em> company"
           ]
        }
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           707 次  |  
        
|   最近记录:  |