elasticsearch - 短语搜索的词干提取和突出显示

标签 elasticsearch highlighting stemming

我的 Elasticsearch 索引中充满了大型英文文本文档。当我搜索 “it is rare” 时,我得到了 20 个与该短语完全匹配的结果,而当我搜索 “it is rarely” 时,我得到了不同的 10 个结果。如何我一次获得所有 30 个匹配项?

我已经尝试使用英语分析器创建一个多字段(如下),但是如果我在那个字段中搜索,那么我只能从部分短语中获得结果(例如,文档匹配 it or is or rare) 而不是整个短语。

"mappings" : {
   ...
      "text" : {
        "type" : "string",
        "fields" : {
          "english" : {
            "type" : "string",
            "store" : true,
            "term_vector" : "with_positions_offsets_payloads",
            "analyzer" : "english"
          }
        }
      },
   ...

最佳答案

想通了!

  1. 存储两个字段,一个用于文本内容 (text) 和一个包含英文化词干的子字段 (text.english)。
  2. 根据 default English analyzer 创建自定义分析器不会去除停用词。
  3. 在向用户显示结果时突出显示这两个字段并检查每个字段。

这是我的索引配置:

{
  mappings: {
    documents: {
      properties: {
        title: { type: 'string' },
        text: {
          type: 'string',
          term_vector: 'with_positions_offsets_payloads',
          fields: {
            english: {
              type: 'string',
              analyzer: 'english_nostop',
              term_vector: 'with_positions_offsets_payloads',
              store: true
            }
          }
        }
      }
    }
  },
  settings: {
    analysis: {
      filter: {
        english_stemmer: {
          type: 'stemmer',
          language: 'english'
        },
        english_possessive_stemmer: {
          type: 'stemmer',
          language: 'possessive_english'
        }
      },
      analyzer: {
        english_nostop: {
          tokenizer: 'standard',
          filter: [
            'english_possessive_stemmer',
            'lowercase',
            'english_stemmer'
          ]
        }
      }
    }
  }
}

下面是一个查询:

{
  query: {
    query_string: {
      query: <query>,
      fields: ['text.english'],
      analyzer: 'english_nostop'
    }
  },
  highlight: {
    fields: {
      'text.english': {}
      'text': {}
    }
  },
}

关于elasticsearch - 短语搜索的词干提取和突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27204606/

相关文章:

lda - 词干提取和词形还原 - 什么方法?

elasticsearch - 编辑 ElasticSearch 7.3 的状态文件

elasticsearch - Elasticsearch 重新索引多类型父/子索引(v5.0)以连接类型索引(v6.2)

elasticsearch - Elasticsearch-接近实时搜索(1秒)

JavaScript:向上/向下滚动时突出显示一行

nlp - 文本分类 - 使用词干分析器会降低结果?

OSX 上的 Java 文件限制低于 bash

PHP/MySQL : Highlight "SOUNDS LIKE" query results

listview - 如何以编程方式用户根据 JavaFX 中的字符串值定义 ListView 的颜色

python - nltk : How to prevent stemming of proper nouns