elasticsearch dsl python:如何按数组内的值搜索
elasticsearch dsl python : how to search by value inside array
我的索引中有以下结构:
[
{
name:"project1",
users: [
{"id":"1"},
{"id":"2"}
]
},
#... more projects
]
我想知道如何获取特定用户的所有项目(通过他的 ID),这是我尝试过的方法:
q = Q("term", id="1")
resp = projects_index.query("nested",path="users",query=q).execute()
但是我没有得到结果,我错过了什么?
谢谢
编辑 :
这是我的索引映射:
{
"projects": {
"mappings": {
"doc": {
"properties": {
"created_at": {
"type": "date"
},
"name": {
"type": "text"
},
"users": {
"type": "nested",
"properties": {
"id": {
"type": "text"
}
}
}
}
}
}
}
}
您没有得到结果的原因是,在指定嵌套路径时,您应该提供包括父字段名称在内的全名,即您应该使用 users.id
而不仅仅是 id
。因此查询将转换为如下:
{
"query": {
"bool": {
"filter": [
{
"nested": {
"path": "users",
"query": {
"term": {
"users.id": "1"
}
}
}
}
]
}
}
}
建议:将id
字段的类型更改为keyword
,以防止id值被标记为多个术语。
我的索引中有以下结构:
[
{
name:"project1",
users: [
{"id":"1"},
{"id":"2"}
]
},
#... more projects
]
我想知道如何获取特定用户的所有项目(通过他的 ID),这是我尝试过的方法:
q = Q("term", id="1")
resp = projects_index.query("nested",path="users",query=q).execute()
但是我没有得到结果,我错过了什么?
谢谢
编辑 :
这是我的索引映射:
{
"projects": {
"mappings": {
"doc": {
"properties": {
"created_at": {
"type": "date"
},
"name": {
"type": "text"
},
"users": {
"type": "nested",
"properties": {
"id": {
"type": "text"
}
}
}
}
}
}
}
}
您没有得到结果的原因是,在指定嵌套路径时,您应该提供包括父字段名称在内的全名,即您应该使用 users.id
而不仅仅是 id
。因此查询将转换为如下:
{
"query": {
"bool": {
"filter": [
{
"nested": {
"path": "users",
"query": {
"term": {
"users.id": "1"
}
}
}
}
]
}
}
}
建议:将id
字段的类型更改为keyword
,以防止id值被标记为多个术语。