【问题标题】:ElasticSearch / Python dynamic number of filtersElasticSearch / Python 动态过滤器数量
【发布时间】:2016-10-03 17:47:56
【问题描述】:

我对编程很陌生,所以我的问题可能很愚蠢/很容易做到,但是: 我需要根据用户输入在 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 elasticsearch elasticsearch-plugin


    【解决方案1】:

    这是可能的。主体只是一个 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}}]
    

    【讨论】:

      猜你喜欢
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多