在Elasticsearch查询字符串查询的短语中使用通配符

时间:2017-03-05 21:30:38

标签: elasticsearch

使用通配符运算符,我可以匹配从某个值开始的术语:

.delay

此处的{ "query": { "query_string" : { "query" : "subject:cell*" } } } 字段是subject字段(未分析)。这很好,但我无法弄清楚如何找到以#34;蜂窝控制为例的术语。试用双引号并没有产生预期的结果:

keyword

注意:短语搜索在完全匹配时工作正常,而不是通配符。我猜测星号不会被解释为双引号内的通配符运算符。那是对的吗?还有其他方法可以使用带有短语的通配符运算符吗?

注意:我必须使用Query String Query,因为查询来自用户输入。

(我知道我可以使用正则表达式,但不愿意这样做)

3 个答案:

答案 0 :(得分:4)

除了Hemed指出的自定义分析器之外,您还需要进行如下搜索 -

RegistryValueKind

经过大量的研究和尝试后找到了它!

答案 1 :(得分:2)

修改 定义用于搜索的自定义分析器: -

settings:
   index:
     analysis:
       analyzer:
         keyword_analyzer:
           type: custom
           tokenizer: keyword
           filter:
             - lowercase

在这种情况下,您需要使用Prefix Query,因为在解析过程中,查询字符串查询始终在空格上进行分段。

但由于您在此字段中使用lowecase filter并且前缀查询不支持分析器,因此在将其附加到查询之前,您必须小写用户输入。

新查询变为: -

   {
        "query": {
            "prefix" : {
                "subject" : "cellular contr"
            }
        }
    }

或者,您可以使用支持分析器的Match Phrase Query

{
    "query": {
        "match_phrase_prefix" : {
            "subject" : {
                 "query" : "Cellular contr",
                  "analyzer" : "keyword_analyzer",
                  "max_expansions" : 100
                 }
              }
         }
    }

答案 2 :(得分:0)

试试这个:

{
    "query": {
        "query_string" : {
            "query" : "subject:"cellular contr*",
            "split_on_whitespace" : false
        }
    }
}