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

dan*_*elo 7 elasticsearch

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

{
    "query": {
        "query_string" : {
            "query" : "subject:cell*"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

subject这里的字段是一个keyword字段(未分析).这很好,但我无法弄清楚如何找到以"蜂窝控制"开头的术语.尝试双引号没有产生预期的结果:

{
    "query": {
        "query_string" : {
            "query" : "subject:\"cellular contr*\""
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

注意:我必须使用查询字符串查询,因为查询来自用户输入.

(我知道我可以诉诸regexp,但不愿意)

小智 7

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

{
    "query": {
        "query_string" : {
            "query" : "subject:cellular\\ contr*"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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


paq*_*ash 0

尝试这个:

{
    "query": {
        "query_string" : {
            "query" : "subject:"cellular contr*",
            "split_on_whitespace" : false
        }
    }
}
Run Code Online (Sandbox Code Playgroud)