我正在使用elasticsearch-6.4.3
我使用以下映射创建了索引test_index:
PUT test_index
{
"mappings": {
"_doc": {
"properties": {
"name": {
"type": "keyword"
},
"segments": {
"type": "nested",
"properties": {
"f1": {
"type": "keyword"
},
"f2": {
"type": "integer"
}
}
}
}
}
}
}
我使用以下命令在索引中插入了文档:
POST /test_index/_doc
{
"name": "ABC",
"segments": [{
"f1": "abc",
"f2": 123
},
{
"f1": "def",
"f2": 124
}]
}
我有一个说arr = ["def", "xyz"]
的值数组。我想将f1 field in segments field
中至少一个匹配的所有文档与给定数组arr
中的任何值匹配。
您可以将其命名为array_intersect之类,以便于理解。
我正在尝试这样的事情:
GET /test_index/_search
{
"query": {
"nested": {
"path": "segments",
"query": {
"bool": {
"must": [
{
"terms": {
"f1": [
"def",
"xyz"
]
}
}
]
}
}
}
}
}
我没有得到任何结果。
Expected output
:文档应该匹配,因为文档中f1的值表示为“ def”。
答案 0 :(得分:1)
您需要在词条查询中将完整路径指定为segments.f1
,而不是nested query的f1
。
按如下所示修改查询:
POST test_index/_search
{
"query":{
"nested":{
"path":"segments",
"query":{
"bool":{
"must":[
{
"terms": {
"segments.f1": ["def","xyz"] <---- Mention full path here
}
}
]
}
}
}
}
}
希望这会有所帮助!