我正在创建一个将使用布尔运算符(as described here)的搜索字段,我希望它们的行为与我的普通(非布尔运算符)查询相同,这些查询与部分字符串匹配{ {1}}。为了说明:搜索prefix_match
,获取fir
,fire pit
,fire ball
等结果。但是,如果我然后搜索firm
,它仍会返回fire -b
,我认为是错的;我必须搜索fire ball
以排除fire -ball
。有没有办法改变这种行为?
作为参考,这是当前发送到ES服务器的查询:
fire ball
答案 0 :(得分:3)
Query String
查询允许使用通配符。我相信你应该删除多匹配。我相信会弄乱你的结果,只需在每个术语的末尾添加一个通配符,如下所示。如果你想要一些完全匹配,只是不要添加通配符。此外,此查询支持fuzziness
,默认设置为AUTO
,这可能会使您的结果陷入混乱。如果要禁用它,只需将其设置为零。
{
"query": {
"bool": {
"should": [
{
"queryString": {
"fields": [
"name"
],
"query": "fire* -b*",
"defaultOperator": "OR"
}
}
]
}
}
}