gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:58:26 25 4
gpt4 key购买 nike

我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com