版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
这里使用的场景是在子文档中匹配object字段spu_info.spu_name,brand_info.brand_name,过滤子文档的is_hidden和state的字段,并且在父文档也过滤is_hidden和state字段。
代码语言:javascript复制search_obj = {
"query": {
"filtered": {
"query":{
"has_child":{
"type":"skus",
"score_mode":"max",
"query":{
"filtered":{
"query": {
"multi_match": {
"query": "全纺家私双人床",
"type": "cross_fields",
"fields": [
"spu_info.spu_name^3",
"brand_info.brand_name",
"tags"
]
}
},
"filter":{
"bool":{
"must":[
{"term":{"is_hidden":0}},
{"term":{"state":0}}
]
}
}
}
},
"inner_hits":{}
}
},
"filter": {
"bool": {
"must": [
{
"term":{"is_hidden":0}
},
{
"term":{"state":0}
}
]
}
}
}
}
}
在多个字段上进行匹配,并且对不同的字段配置不同的权重,采用cross_fileds,为了显示显示子文档的source,明确指明了inner_hits,并且加入了filer,filer中放入bool过滤器。
去掉里面的填充物,外部的骨架可以总结为下面:
代码语言:javascript复制{
"query": {
"filtered": {
"query":{
},
"filter": {
"bool": {
"must": [
],
"should":[],
...
}
}
}
}
}