在某些文本字段中搜索单词时,我需要帮助来理解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分析器,或者有更好的方法呢? 谢谢。
答案 0 :(得分:1)
您可能想使用类似match_phrase
的查询。它支持可配置的斜坡。
{
"query":
{ "match_phrase": { "description": { "query": "<query>" , slop: <slop>} } }
}