我正在研究elasticsearch并在搜索查询中使用术语。请查看以下索引数据示例:
"_source": {
"type": "ITEM",
"primaryKey": "3923",
"displayName": "Lumia 505",
"attributes": {
"n26273": "Lumia 505",
"n26275": "Mobile"
},
"mappings": {
"Primary Hierarchy": [
"Nokia"
]
}
}
对于根据我的任何搜索文本搜索数据,我使用以下查询,该查询工作正常:
{
"query":{
"bool":{
"must":[
{
"query_string":{
"query":"----MySearchTextHere----",
"default_operator":"AND"
}
},
{
"term":{
"type":"item"
}
}
]
}
},
"size":10,
"from":0
}
查询:
1如何在查询中添加术语来搜索字段“mappings.primary hierarchy”,它是一个数组?
2由于嵌套字段名是动态的,如何在不提及嵌套字段名的情况下实现#1?只有字段名Map是常量。
1条答案
按热度按时间py49o6xq1#
引用嵌套字段没有问题(
"mappings.Primary Hierarchy"
在您的情况下)在术语查询中这只会成功地被诺基亚过滤掉。如果您想准确地使用诺基亚(不是经过分析的术语),您应该使用
"mappings.Primary Hierarchy.keyword"
现场。关键字在这里的意思是,这个字段的内容与您在索引期间传递的内容完全相同。第二件事也是可能的,但需要正确的Map。您需要指定Map是嵌套类型(这意味着其中可能有其他字段)。
您的案例中的简单示例如下:
您需要使用这些设置创建索引。
在这种情况下,您的查询可能如下所示:
没有指定字段的多重匹配查询将默认为Map对象下的所有字段