我正在尝试过滤Elasticsearch查询(ES 5.6.2)中nested document内的字段。嵌套文档本身是主文档内部对象中的一个字段。映射看起来像这样:
{
"mappings": {
"container": {
"properties": {
"host": {
"properties": {
"tags_nested": {
"type": "nested",
"properties": {
"tag_key": {
"type": "keyword"
},
"tag_val": {
"type": "keyword"
}
}
}
}
}
}
}
}
}
我想过滤host.tags_nested.tag_keys
,但我无法找到正确的语法来访问tags_nested
内部对象中的嵌套host
文档。我尝试了以下查询,当我知道有一些应该匹配时,它不会返回任何结果:
{
"query": {
"nested": {
"path": "host.tags_nested",
"query": {
"bool": {
"filter": [
{
"term": {
"host.tags_nested.tag_key": "example_key"
}
}
]
}
}
}
}
}
根据ES docs,您可以通过传递与嵌套文档的字段名称相对应的nested
来执行path
查询以在嵌套文档中进行查询。但是当path
在内部对象中并且需要使用点表示法访问时,这似乎不起作用。
有什么想法吗?
答案 0 :(得分:0)
试试这个。 Term Query会搜索我们指定的确切字词。因此,对于该用途fieldname.keyword
,因为关键字在我们索引它们时会存储精确的文本。
{
"query": {
"nested": {
"path": "host.tags_nested",
"query": {
"bool": {
"filter": [
{
"term": {
"host.tags_nested.tag_key.keyword": "example_key"
}
}
]
}
}
}
}
}