如何使用 elasticsearch-dsl-py 创建“In”条件过滤器?
How do I create an “In” Condition filter using elasticsearch-dsl-py?
下面的查询是我想用elasticsearch-dsl-py构造的,但是我不知道怎么做。
GET /my_index/_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"term": {
"status": "a"
},
"term": {
"status": "b"
},
"term": {
"status": "c"
}
}
]
}
}
}
}
}
我只想以 SQL 格式执行如下查询
select * from my_index where status in ("a","b","c")
使用 elasticsearch-dsl-py,这是我能得到的最接近的结果,但并不相同。
class MyIndex(Document):
status = Keyword() / Text()
MyIndex.search().filter('should', status=["a","b","c"])
另一种方法是对数组使用 terms
查询,因为每个数组元素都是隐式或运算的。另外,我不确定你是哪个版本的 ES 运行,但只知道 很久以前在版本 5 中。所以你的查询可以这样重写:
GET /my_index/_search
{
"query": {
"bool": {
"filter": {
"terms": {
"status": ["a", "b", "c"]
}
}
}
}
}
使用 elasticsearch-dsl-py
,转换为:
s = Search()
s = s.filter('terms', status=['a', 'b', 'c'])
下面的查询是我想用elasticsearch-dsl-py构造的,但是我不知道怎么做。
GET /my_index/_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"term": {
"status": "a"
},
"term": {
"status": "b"
},
"term": {
"status": "c"
}
}
]
}
}
}
}
}
我只想以 SQL 格式执行如下查询
select * from my_index where status in ("a","b","c")
使用 elasticsearch-dsl-py,这是我能得到的最接近的结果,但并不相同。
class MyIndex(Document):
status = Keyword() / Text()
MyIndex.search().filter('should', status=["a","b","c"])
另一种方法是对数组使用 terms
查询,因为每个数组元素都是隐式或运算的。另外,我不确定你是哪个版本的 ES 运行,但只知道
GET /my_index/_search
{
"query": {
"bool": {
"filter": {
"terms": {
"status": ["a", "b", "c"]
}
}
}
}
}
使用 elasticsearch-dsl-py
,转换为:
s = Search()
s = s.filter('terms', status=['a', 'b', 'c'])