ElasticSearch [and or] filter 写法求救!

初次接触 ElasticSearch,对它的 filter 语法还不熟悉,自己尝试模拟以下 SQL 语句,但 ElasticSearch 语法解析一直失败,说语法错误。错误的地方应该在 or 这个条件,因为去掉该条件,这个语句是可以执行的。求大神帮忙,谢谢!

SELECT *
FROM users
WHERE 
    sex = 'male'
    AND (city IN ('beijing', 'shanghai') OR home = 'guangzhou')
    AND name LIKE '%xiaoming%'

使用 and or filter 进行查询,其 json 参数如下:

{
    "query": {
        "filtered": {
            "filter": {
                "and": {
                    "0": {
                        "term": {
                            "sex": "male"
                        }
                    }, 
                    "or": [
                        {
                            "terms": {
                                "city": [
                                    "beijing", 
                                    "shanghai"
                                ]
                            }
                        }, 
                        {
                            "term": {
                                "home": "guangzhou"
                            }
                        }
                    ]
                }
            }, 
            "query": {
                "constant_score": {
                    "query": {
                        "match": {
                            "name": "xiaoming"
                        }
                    }
                }
            }
        }
    }
}
阅读 8.6k
1 个回答

Elastic大神都不经常来这里,以后去开源中国问吧。

你可以这样写

"filter": {
   "and": [
       {
           "term": {"sex": "male"}
       }, 
       {
           "or": [
                {"terms": {"city": [ "beijing", "shanghai"]}}, 
                {"term": {"home": "guangzhou" } }
            ]
       }
    ]
}    
       
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进