我正在使用elasticsearch-dsl-py,并希望过滤包含在另一个术语中的术语,如下所示:
"slug": {
"foo": "foo-slug",
"bar": "bar-slug "
}我所做的是:
search.query(‘filtered’, filter={"term": {"slug.foo": "foo-slug"}})我更喜欢像这样的东西
search.filter(term, slug.foo="foo-slug")但我不能,因为关键字不能包含点。
发布于 2016-02-04 00:21:45
如果对其他人有帮助的话,我在使用嵌套对象对子属性而不是创建这种查询时也遇到了同样的问题。我发现解决方案是使用query方法而不是filter方法:
search.query('match', **{"slug.foo": "foo-slug"})这对我在ElasticSearch 1.5.2中是有效的。
发布于 2016-02-13 06:27:51
编辑...不要这样做:查看aaronfay的答案以了解正确的方法。
这似乎没有记录在任何地方,这是可悲的……
>>> search.filter('term', slug__foo='foo-slug').to_dict()
{'query': {'filtered': {'filter': {'term': {u'slug.foo': 'foo-slug'}}, 'query': {'match_all': {}}}}}双下划线将转换为点符号。不知道这是否稳定。
发布于 2015-09-06 04:07:10
所以我假设slug是一个较大文档中的nested object。在当前版本(0.0.8)中,这可以像这样实现:
from elasticsearch_dsl import F
...
f = F('term', foo='foo-slug')
search = search.filter('nested', path='slug', filter=f)https://stackoverflow.com/questions/27023689
复制相似问题