首页 文章

弹性搜索突出显示与同义词过滤器的交互

提问于
浏览
13

我们有一个包含同义词过滤器的分析器,定义如下:

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”和“公司” .

是否有推荐的方法来解决这些问题,其中突出显示了一个意外的单词,因为它占据了由于同义词而插入的搜索词的相同位置?

1 回答

  • 4

    @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"
               ]
            }
    

相关问题