目录:
(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"
]
}