gpt4 book ai didi

python - ElasticSearch/Python 动态过滤器数量

转载 作者:太空宇宙 更新时间:2023-11-03 16:30:46 26 4
gpt4 key购买 nike

我对编程还很陌生,所以我的问题可能很愚蠢/很容易做到,但是:我需要根据用户输入在elasticsearch中创建多个过滤器

我的查询正文:

body = {
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{"term": {name1: value1}},
{"term": {name2: value2}},
{"term": {name3: value3}},
]
}
}
}
},
}

它工作正常,但我需要有这些过滤器的动态数量

我尝试将查询构建到字符串中,然后在其中添加过滤器,但 es 不允许这样做,例如:

l = []
for i_type, name in convert.items():
string = '{"term": {"' + i_type + '":"' + name + '"}},'
l.append(string)
i_query = ''.join(l)

当我在查询结构中使用列表/字符串时,我从服务器收到 404 错误

是否可以添加动态数量的过滤器?

最佳答案

这是可能的。本体只是一个Python dictionary 。因此您可以动态添加字段/术语/新过滤器等。

    body = {
"query": {
"filtered": {
"filter": {
"bool": {
"must": []
}
}
}
}
}

d = {"name_1": value_1, "name_2": value_2}

Python 2.x

for key, value in d.iteritems():
body1["query"]["filtered"]["filter"]["bool"]["must"].append({"term": {key: value}})

或更短(Python 2.x):

body1["query"]["filtered"]["filter"]["bool"]["must"].extend([{"term": {key: value}} for key,value in d.iteritems()])

Python 3.x

for key, value in d.items():
body1["query"]["filtered"]["filter"]["bool"]["must"].append({"term": {key: value}})

Python 3.x 的较短版本:

body1["query"]["filtered"]["filter"]["bool"]["must"].extend([{"term": {key: value}} for key,value in d.items()])

基本上,您可以创建任何您想要的查询。例如,您可以轻松添加 should 子句:

body["query"]["filtered"]["filter"]["bool"]["should"]=[{"term": {"name_42": value_42}}]

关于python - ElasticSearch/Python 动态过滤器数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37618131/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com