solr - Elastic Search Highlights 与 Synonym Filter 的交互

标签 solr lucene elasticsearch

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

        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/

相关文章:

elasticsearch - Elastic Search 自动翻转索引

sql - 使用SQLServer查询elasticSearch数据

java - 两个 Solr 查询的比较

java - 生成 Lucene segments_N 文件

solr - 如何使用 FAL 和自己的 Extbase 扩展名在 Typo3 solr 扩展名中获取文件名

lucene - JCR-SQL - 包含函数不会转义特殊字符?

search - 如何在 solr 的多值字段中添加不同的值

java - Lucene - 如何使用 TeeSinkTokenFilter?

包含某些特定单词的 Solr Negative Boost 查询结果

mysql - 从 MySQL 过渡到 Elasticsearch 时处理搜索?