1

我正在使用弹性搜索,其中查询将以 json 格式发布,并且应该按标准顺序排列,否则结果将是错误的。问题是python正在改变我的json排序。我原来的 json 查询是。

x= {
  "query": {
    "filtered": {
      "query": {
        "query_string": {
          "query": "*a*"
        }
      },
      "filter": {
        "and": {
          "filters": [
            {
              "term": {
                "city": "london"
              }
            },
            {
              "term": {
                "industry.industry_not_analyed": "oil"
              }
            }
          ]
        }
      }
    }
  },
  "facets": {
    "industry": {
      "terms": {
        "field": "industry.industry_not_analyed"
      }
    },
    "city": {
      "terms": {
        "field": "city.city_not_analyzed"
      }
    }
  }
}

但生成的 python 对象如下。

{
  'query': {
    'filtered': {
      'filter': {
        'and': {
          'filters': [
            {
              'term': {
                'city': 'london'
              }
            },
            {
              'term': {
                'industry.industry_not_analyed': 'oil'
              }
            }
          ]
        }
      },
      'query': {
        'query_string': {
          'query': '*a*'
        }
      }
    }
  },
  'facets': {
    'city': {
      'terms': {
        'field': 'city.city_not_analyzed'
      }
    },
    'industry': {
      'terms': {
        'field': 'industry.industry_not_analyed'
      }
    }
  }
}

结果与我需要的不同我该如何解决。

4

1 回答 1

3

使用OrderedDict()而不是{}. 请注意,您不能简单地使用OrderedDict(query=...),因为这会在后台创建一个无序的字典。请改用此代码:

x = OrderedDict()
x['query'] = OrderedDict()
...

我建议为此实施一个构建器:

x = Query().filtered().query_string("*a*").and()....
于 2013-10-09T07:48:08.500 回答