我想在Elasticsearch
中执行以下查询 SELECT * FROM TABLE WHERE feed_id =1 AND brand='Samsung' OR brand='Apple iPhone'
我使用了这个JSON查询
``
"bool" : {
"should":[
{
"multi_match":
{
"query":"LG",
"operator":"and",
"fields":"brand"
}
},
{
"multi_match":
{
"query":"Samsung",
"operator":"and",
"fields":"brand"
}
},
{
"multi_match":
{
"query":"Nokia",
"operator":"and",
"fields":"brand"
}
}
],
"filter": {
"bool": {
"must": [
{ "term": { "feed_id":1}}
]
}
}
}``
这将返回所有结果..
这是我的映射
"model": {
"type": "text",
"fields": {
"autocomplete": {
"type": "text",
"analyzer": "autocomplete"
},
"keyword": {
"type": "keyword"
}
}
}
然而,当我删除"过滤器"我得到了预期的结果。
我的查询有什么问题?
我使用ES 5.0
答案 0 :(得分:0)
尝试此查询。当你在一个字段上搜索时,不要认为你需要multi_match
。
{
"query": {
"bool": {
"must": [
{
"term": {
"feed_id": 1
}
},
{
"terms": {
"brand": [
"LG",
"Samsung",
"Nokia"
]
}
}
]
}
}
}
答案 1 :(得分:0)
现在有效:
我添加了minimum_should_match过滤器,现在它可以工作..
如果有人遇到同一问题,请查看查询
`
{
"multi_match":
{
"query":"Nokia",
"operator":"and",
"fields":"brand"
}
},
{
"multi_match":
{
"query":"Wifi",
"operator":"and",
"fields":"name"
}
},
{
"multi_match":
{
"query":"LG K10",
"operator":"and",
"fields":"name"
}
}
],
"minimum_should_match":"1"
}