作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个将使用 bool 运算符 ( as described here ) 的搜索字段,我希望它们的行为与我的正常(非 bool 运算符)查询相同,由于 而匹配部分字符串前缀匹配
。举例说明:搜索fir
,得到fire pit
、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"
]
}
}
]
}
}
}
最佳答案
Query String
查询允许通配符。我相信你应该删除 multimatch。我相信会弄乱你的结果,只需在每个术语的末尾添加一个通配符,如下所示。如果你想要一些完全匹配,只是不要添加通配符。此外,此查询支持 fuzziness
,默认设置为 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/
我是一名优秀的程序员,十分优秀!