Elasticsearch(三) 查询与过滤

2019-08-21 22:33:52 浏览数 (1)

版权声明:本文为博主原创文章,遵循 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":[],
          ...
        }
      }
    }
  }
}

0 人点赞