尚品汇-ES中DSL查询案例、整合(三十)

目录:

(1)利用es开发电商的搜索列表功能

(2) DSL查询案例

(3)案例全部整合

(1)利用es开发电商的搜索列表功能

商品检索流程:

 

 

 (2) DSL查询案例

搜索结果预期数据展示

利用dsl 语句查询es 数据

需求分析:

问题:用户进入网站后,可能会根据哪些条件进行查询?

分类id

平台属性

品牌

商品名称

演示:

情况一:match匹配查询title“小米手机”

   需求:只能查询出小米系列的

改进:通过 operator添加and条件

情况二:查询分类使用filter中term和terms演示

情况三:添加品牌条件,在原来的term后面,直接追加即可

    在没有filter的情况,不能直接追加,需要于must平齐添加filter后,在添加term过滤条件。

情况四: 查询,分页,高亮处在同一个阶层。

情况五: 高亮时,必须在查询关键字的基础上

GET /goods/_search

{

  "query": {

    "bool": {

      "filter": [

        {

          "term": {

            "category3Id": "61"

          }

        },

        {

          "term": {

            "tmId": "3"

          }

        },

        {

          "bool": {

            "must": [

              {

                "nested": {

                  "path": "attrs",

                  "query": {

                    "bool": {

                      "must": [

                        {

                          "term": {

                            "attrs.attrValue": {

                              "value": "256G"

                            }

                          }

                        }

                      ]

                    }

                  }

                }

              }

            ]

          }

        }

      ],

      "must": [

        {

          "match": {

            "title": "荣耀手机"

          }

        }

      ]

    }

  },

  "from": 0,

  "size": 20,

  "sort": [

    {

      "hotScore": {

        "order": "desc"

      }

    }

  ],

  "highlight": {

    "fields": {

      "title": {}

    },

    "post_tags": [

      "</span>"

    ],

    "pre_tags": [

      "<span style=color:red>"

    ]

  },

  "aggs": {

    "tmIdAgg": {

      "terms": {

        "field": "tmId"

      },

      "aggs": {

        "tmNameAgg": {

          "terms": {

            "field": "tmName",

            "size": 10

          }

        },

        "tmLogoUrlAgg": {

          "terms": {

            "field": "tmLogoUrl",

            "size": 10

          }

        }

      }

    },

    "attrAgg": {

      "nested": {

        "path": "attrs"

      },

      "aggs": {

        "attrIdAgg": {

          "terms": {

            "field": "attrs.attrId",

            "size": 10

          },

          "aggs": {

            "attrNameAgg": {

              "terms": {

                "field": "attrs.attrName",

                "size": 10

              }

            },

            "attrValueAgg": {

              "terms": {

                "field": "attrs.attrValue",

                "size": 10

              }

            }

          }

        }

      }

    }

  }

}

匹配查询:当搜索小米手机的时候,由于分词,导致把华为手机的也搜索出来了,搜索8条数据

分完词后,我们显示的时候不要or查询,而是分词的两个必须都满足:搜索只包含小米手机的4条数据

过滤查询:分类过滤

过滤查询-根据品牌 

过滤查询-根据平台属性

分页查询:

排序查询-价格...

聚合查询-品牌id

自聚合:添加查询名称 

再添加一个url:

聚合查询:-平台属性聚合

高亮显示:

过滤查询的字段:

整合:

结果:

(3)案例全部整合

匹配查询: 

过滤:分类id

过滤:品牌

过滤:平台属性:

分页:

排序:

聚合:品牌id:

聚合:平台属性:

高亮:

过滤查询结果:

 

#组合整体的DSL语句
POST goods/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": {
              "query": "小米手机",
              "operator": "and"
            }
          }
        }
      ],
      "filter": [
        {
          "term": {
            "category3Id": "61"
          }
        },
        {
          "term": {
            "tmId": "1"
          }
        },
        {
          "bool": {
            "must": [
              {
                "nested": {
                  "path": "attrs",
                  "query": {
                    "bool": {
                      "filter": [
                        {
                          "term": {
                            "attrs.attrValue": "8G"
                          }
                        }
                      ]
                    }
                  }
                }
              }
            ]
          }
        }
      ]
    }
  },
  "from": 0,
  "size": 2,
  "sort": [
    {
      "hotScore": {
        "order": "asc"
      }
    }
  ],
  "aggs": {
    "tmIdAgg": {
      "terms": {
        "field": "tmId",
        "size": 10
      },
      "aggs": {
        "tmNameAgg": {
          "terms": {
            "field": "tmName",
            "size": 10
          }
        },
        "tmLogoUrlAgg": {
          "terms": {
            "field": "tmLogoUrl",
            "size": 10
          }
        }
      }
    },
    "attrAgg": {
      "nested": {
        "path": "attrs"
      },
      "aggs": {
        "attrIdAgg": {
          "terms": {
            "field": "attrs.attrId",
            "size": 10
          },
          "aggs": {
            "attrNameAgg": {
              "terms": {
                "field": "attrs.attrName",
                "size": 10
              }
            },
            "attrValueAgg": {
              "terms": {
                "field": "attrs.attrValue",
                "size": 10
              }
            }
          }
        }
      }
    }
  },
  "highlight": {
    "fields": {
      "title": {}
    },
    "pre_tags": [
      "<span style=color:red>"
    ],
    "post_tags": [
      "</span>"
    ]
  },
  "_source": [
    "id",
    "defaultImg",
    "title",
    "price"
  ]
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵俺第一专栏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值