我正在使用nodejs应用中的elasticsearch模块使用模糊补全查询我的索引。我尝试搜索的文本是Rome–Fiumicino Leonardo da Vinci International Airport
。当搜索这个词时,我没有得到任何结果,但如果我将这个词削减到50个字符,它确实找到了它并返回结果。
const result = await elasticsearch.search({
index: 'myIndex',
body: {
suggest: {
fuzzinessZero: {
text,
completion: {
field: 'name_suggest',
fuzzy: {
fuzziness: 0,
},
contexts,
},
},
fuzzinessOne: {
text,
completion: {
field: 'name_suggest',
fuzzy: {
fuzziness: 1,
},
contexts,
},
},
fuzzinessTwo: {
text,
completion: {
field: 'name_suggest',
fuzzy: {
fuzziness: 2,
},
contexts,
},
},
},
}
})
这是我在fuzzinessOne
中得到的结果,正如你所看到的,text
字段中的结果被削减到50个字符(可能这就是问题所在)。在_source
中,我得到了所有用于搜索的输入,其中一个是我试图搜索的完整的确切术语,以及所有其他可用的组合。
值得一提的是,我使用的是AWS openSearch,这是我用来创建索引的设置:
settings: {
analysis: {
filter: {
autocomplete_filter: {
type: 'edge_ngram',
min_gram: 2,
max_gram: 20,
},
shingle_filter: {
type: 'shingle',
max_shingle_size: 3,
},
},
analyzer: {
autocomplete: {
type: 'custom',
tokenizer: 'standard',
filter: ['lowercase', 'shingle_filter', 'asciifolding'],
},
},
},
}
1条答案
按热度按时间bqucvtff1#
您遇到此问题的原因是
max_input_length
参数的默认值设置为50
。以下是文档中对此参数的说明:
限制单个输入的长度,默认为50个UTF-16码位。此限制仅在索引时使用,以减少每个输入字符串的总字符数,从而防止大量输入使基础数据结构膨胀。大多数用例不会受默认值的影响,因为前缀完成很少超过前缀长度超过少数字符。
您可以使用此默认行为,也可以通过增加
max_input_length
参数值来更新索引Map,然后重新索引数据。