14

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

        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”,因为这是等效的同义词,但似乎弹性搜索将此视为两次命中,因为它匹配“wasted”和“time”,并返回两个亮点:“dawdle”和“company” ”。

有没有推荐的方法来解决这类问题,即在突出显示中返回意外的单词,因为它占据了由于同义词而插入的搜索词的相同位置?

4

1 回答 1

4

@SergeyS 您和 @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"
           ]
        }
于 2015-07-22T11:58:05.350 回答