Elasticsearch搜索-使用分析器查询span_near

时间:2019-04-15 14:45:54

标签: elasticsearch search

在某些文本字段中搜索单词时,我需要帮助来理解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分析器,或者有更好的方法呢? 谢谢。

1 个答案:

答案 0 :(得分:1)

您可能想使用类似match_phrase的查询。它支持可配置的斜坡。

{
  "query":
  { "match_phrase": { "description": { "query": "<query>" , slop: <slop>} } }
}