ltb*_*esh 3 python elasticsearch
我正在使用elasticsearch-dsl-py,并希望过滤包含在另一个内的术语,如下所示:
"slug": {
"foo": "foo-slug",
"bar": "bar-slug "
}
Run Code Online (Sandbox Code Playgroud)
我这样做是:
search.query(‘filtered’, filter={"term": {"slug.foo": "foo-slug"}})
Run Code Online (Sandbox Code Playgroud)
我更喜欢类似的东西
search.filter(term, slug.foo="foo-slug")
Run Code Online (Sandbox Code Playgroud)
但我不能作为关键字不能包括点.
如果它可以帮助其他任何人,我在针对不使用嵌套对象的子属性创建此类查询时遇到了同样的问题.我发现解决方案是使用query
方法而不是filter
方法:
search.query('match', **{"slug.foo": "foo-slug"})
Run Code Online (Sandbox Code Playgroud)
这在ElasticSearch 1.5.2中适用于我.
编辑...请勿这样做:请参阅aaronfay的答案,了解正确的方法.
这似乎没有记录在任何悲伤的地方......
>>> search.filter('term', slug__foo='foo-slug').to_dict()
{'query': {'filtered': {'filter': {'term': {u'slug.foo': 'foo-slug'}}, 'query': {'match_all': {}}}}}
Run Code Online (Sandbox Code Playgroud)
双下划线将转换为点符号.不知道这是否稳定.
归档时间: |
|
查看次数: |
1908 次 |
最近记录: |