【发布时间】:2019-09-05 14:03:46
【问题描述】:
在某些文本字段中搜索单词时,我需要帮助来理解 Elasticsearch 的行为。我有一个文本字段“描述”,其映射如下:
description: {
type: "text"
analyzer: "lower_ascii"
fielddata: true
}
有设置:
lower_ascii: {
filter: [
"lowercase",
"asciifolding"
],
type: "custom"
tokenizer: "standard"
}
所以它被标准分词器和modifield分词以降低ascii。 如果该字段包含文本,例如'ÁÁÁ XXX YYY ŽŽŽ' 它创建像 'aaa'、'xxx'、'yyy'、'zzz' 之类的标记。 然后,如果我想搜索包含字段中所有单词“aaa zzz”的文档,它不适用于 match 或 match_phase 查询。所以我发现 span_near 查询看起来工作正常,但它没有对搜索值应用 lower_ascii 分析器。 我的查询看起来像:
'query': {
'span_near': {
'clauses': {
{'span_term': {'description' => 'aaa'}},
{'span_term': {'description' => 'zzz'}}
},
"slop": 50,
"in_order": FALSE
}
}
这可以按我的需要工作(如果我理解的话)但是如果我尝试搜索“ÁÁÁ ŽŽŽ”,结果是空的(aaa zzz 效果很好)。有没有办法在查询中设置 lower_ascii 分析器,或者有没有更好的方法以更好的方式做到这一点? 谢谢。
【问题讨论】:
标签: elasticsearch search