我正在使用elasticsearch,其中查询将在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'
}
}
}
}
结果与我需要的结果不同,如何解决这个问题。
答案 0 :(得分:3)
使用OrderedDict()代替{}
。请注意,您不能简单地使用OrderedDict(query=...)
,因为这会在后台创建无序的dict。请改用此代码:
x = OrderedDict()
x['query'] = OrderedDict()
...
我建议为此实现构建器:
x = Query().filtered().query_string("*a*").and()....