使用ES 6.1,Python 3和elasticsearch-dsl,我得到了具有以下映射的文档:
"mappings": {
"doc": {
"properties": {
"id": {"type": "text"},
"prop_a": {"type": "text"},
"prop_b": {
"type": "nested",
"include_in_root": "true",
"properties": {
"title": {"type": "text"},
"prop_bx": {
"type": "nested",
"properties": {
"name": {"type": "text"}
"descr": {"type": "text"}
}
}
例如:
{
"id": "abc123",
"prop_a": "foo",
"prop_b": {
"title": "some title",
"prop_bx": {
"name": "some name"
"descr": "lorem ipsum ipso facto"
}
}}
并且我可以成功查询2级(prop_b)属性“ title”,例如:
s1=Search().using(client).query('nested',
path='prop_b',
query=Q('match', prop_b__title='some title'))
我已经尝试了很多方法来提升到下一个级别(prop_bx),而我最好的镜头是这个,但是它得到了“ 400无法创建查询”:
s2=Search().using(client).query('nested',
path='prop_b',
query=Q('nested',path='prop_b__propbx'),
query=Q('match', prop_b__propbx__name='some name'))
在文档中找不到答案甚至线索。我可以用更详细的标准查询形式编写此代码,然后使用.from_dict()方法进行转换,但是为什么还要麻烦将其转换为elasticsearch-dsl?
线索?谢谢。
答案 0 :(得分:2)
只需使用。而不是路径上的__:
S2=Search().using(client).query('nested',
path='prop_b.probbx',
query=Q('match', prop_b__propbx__name='some name'))