使用通配符运算符,我可以匹配从某个值开始的术语:
.delay
此处的{
"query": {
"query_string" : {
"query" : "subject:cell*"
}
}
}
字段是subject
字段(未分析)。这很好,但我无法弄清楚如何找到以#34;蜂窝控制为例的术语。试用双引号并没有产生预期的结果:
keyword
注意:短语搜索在完全匹配时工作正常,而不是通配符。我猜测星号不会被解释为双引号内的通配符运算符。那是对的吗?还有其他方法可以使用带有短语的通配符运算符吗?
注意:我必须使用Query String Query,因为查询来自用户输入。
(我知道我可以使用正则表达式,但不愿意这样做)
答案 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
}
}
}