首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用elasticsearch-dsl-py对另一个字段中包含的字段创建术语查询

使用elasticsearch-dsl-py对另一个字段中包含的字段创建术语查询
EN

Stack Overflow用户
提问于 2014-11-20 01:57:22
回答 5查看 2.2K关注 0票数 3

我正在使用elasticsearch-dsl-py,并希望过滤包含在另一个术语中的术语,如下所示:

代码语言:javascript
复制
"slug": {
    "foo": "foo-slug",
    "bar": "bar-slug "
}

我所做的是:

代码语言:javascript
复制
search.query(‘filtered’, filter={"term": {"slug.foo": "foo-slug"}})

我更喜欢像这样的东西

代码语言:javascript
复制
search.filter(term, slug.foo="foo-slug")

但我不能,因为关键字不能包含点。

EN

回答 5

Stack Overflow用户

发布于 2016-02-04 00:21:45

如果对其他人有帮助的话,我在使用嵌套对象对子属性而不是创建这种查询时也遇到了同样的问题。我发现解决方案是使用query方法而不是filter方法:

代码语言:javascript
复制
search.query('match', **{"slug.foo": "foo-slug"})

这对我在ElasticSearch 1.5.2中是有效的。

票数 10
EN

Stack Overflow用户

发布于 2016-02-13 06:27:51

编辑...不要这样做:查看aaronfay的答案以了解正确的方法。

这似乎没有记录在任何地方,这是可悲的……

代码语言:javascript
复制
>>> search.filter('term', slug__foo='foo-slug').to_dict()
{'query': {'filtered': {'filter': {'term': {u'slug.foo': 'foo-slug'}}, 'query': {'match_all': {}}}}}

双下划线将转换为点符号。不知道这是否稳定。

票数 7
EN

Stack Overflow用户

发布于 2015-09-06 04:07:10

所以我假设slug是一个较大文档中的nested object。在当前版本(0.0.8)中,这可以像这样实现:

代码语言:javascript
复制
from elasticsearch_dsl import F

...

f = F('term', foo='foo-slug')
search = search.filter('nested', path='slug', filter=f)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27023689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档