我有以下数据:
{
"results":[
{
"ID":"1",
"products":[
{
"product":"car",
"number":"5"
},
{
"product":"computer",
"number":"212"
}
]
},
{
"ID":"2",
"products":[
{
"product":"car",
"number":"9"
},
{
"product":"computer",
"number":"463"
},
{
"product":"bicycle",
"number":"5"
}
]
}
]
}
我的查询如下:
{
"query":{
"bool":{
"must":[
{
"wildcard":{
"results.products.product":"*car*"
}
},
{
"wildcard":{
"results.products.number":"*5*"
}
}
]
}
}
}
我期望只获得ID1。因为它只有一个产品{{product“:”car“,”number“:”5“}记录。但我得到的是ID1和ID2,因为ID2的第一个记录有“产品”:“汽车”和第三个记录分别有“数字”:“5”记录。
我该如何修复此查询?
在创建映射时,您需要将产品定义为nested type。尝试使用以下映射示例:
PUT http://localhost:9200/indexname
{
"mappings": {
"typename": {
"properties": {
"products" : {
"type" : "nested"
}
}
}
}
}
然后,您可以使用嵌套查询来匹配数组的整个元素 - 就像您需要的那样。
{
"query": {
"nested": {
"path": "products",
"query": {
"bool": {
"must": [
{ "wildcard": { "products.product": "*car*" }},
{ "wildcard": { "products.number": "*5*" }}
]
}
}
}
}
}