我正在创建一个将使用 bool 运算符 ( as described here ) 的搜索字段,并且我希望它们的行为与我的正常(非 bool 运算符)查询相同,由于 其与部分字符串匹配前缀_匹配
。举例来说:搜索 fir
,得到的结果如 firepit
、fire ball
、firm
等。但是,如果我随后搜索 fire -b
,它仍然返回 fire ball
,我认为这是错误的;我必须搜索 fire -ball
以排除 fire ball
。有没有办法改变这种行为?
作为引用,这是当前发送到 ES 服务器的查询:
{
"query": {
"bool": {
"should": [
{
"queryString": {
"fields": [
"name"
],
"query": "fire -b",
"defaultOperator": "OR"
}
},
{
"multi_match": {
"query": "fire -b",
"type": "phrase_prefix",
"fields": [
"name"
]
}
}
]
}
}
}
最佳答案
查询字符串
查询允许使用通配符。我相信你应该删除多重匹配。我相信会弄乱你的结果,只需在每个术语末尾添加一个通配符,如下所示。如果您想要某些内容完全匹配,只需不要添加通配符即可。此外,此查询支持模糊性
,默认情况下设置为AUTO
,这可能会再次弄乱您的结果。如果您想禁用它,只需将其设置为零即可。
{
"query": {
"bool": {
"should": [
{
"queryString": {
"fields": [
"name"
],
"query": "fire* -b*",
"defaultOperator": "OR"
}
}
]
}
}
}
关于javascript - Elasticsearch 查询字符串 : partially match a NOT query?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40100006/