Elasticsearch分布式搜索引擎产品经理知啦专栏

基于Elasticsearch实现搜索建议

2017-03-19  本文已影响1510人  ginobefun

搜索建议是搜索的一个重要组成部分,一个搜索建议的实现通常需要考虑建议词的来源、匹配、排序、聚合、关联的文档数和拼写纠错等,本文介绍一个基于Elasticsearch实现的搜索建议。

问题描述

电商网站的搜索是最基础最重要的功能之一,搜索框上面的良好体验能为电商带来更高的收益,我们先来看看淘宝、京东、亚马逊网站的搜索建议。

在淘宝的搜索框输入【卫衣】时,下方的搜索建议包括建议词以及相关的标签:


淘宝的搜索建议

在京东的搜索框输入【卫衣】时,下方搜索建议右方显示建议词关联的商品数量:


京东的搜索建议

在亚马逊的搜索框输入【卫衣】时,搜索建议上部分能支持在特定的分类下进行搜索:


亚马逊的搜索建议

通过上述对比可以看出,不同的电商对于搜索建议的侧重点略有不同,但核心的问题包括:

搜索建议实现

在我们的搜索建议实现里,主要考虑了建议词的来源、匹配、排序、关联的商品数量和拼写纠错。

SuggestionDiscovery

SuggestionCounter

SuggestionIndexRebuiler

SuggestionService

POST /suggestion/_search
{
  "from" : 0,
  "size" : 10,
  "query" : {
    "bool" : {
      "must" : {
        "bool" : {
          "should" : [ {
            "prefix" : {
              "keyword" : "卫衣"
            }
          }, {
            "prefix" : {
              "keyword.keyword_ik" : "卫衣"
            }
          }, {
            "prefix" : {
              "keyword.keyword_pinyin" : "卫衣"
            }
          }, {
            "prefix" : {
              "keyword.keyword_first_py" : "卫衣"
            }
          } ]
        }
      },
      "filter" : {
        "range" : {
          "count" : {
            "from" : 5,
            "to" : null,
            "include_lower" : true,
            "include_upper" : true
          }
        }
      }
    }
  },
  "sort" : [ {
    "weight" : {
      "order" : "desc"
    }
  }, {
    "count" : {
      "order" : "desc"
    }
  } ]
}
POST /suggestion/_search
{
  "size" : 0,
  "suggest" : {
    "keyword_suggestion" : {
      "text" : "adidss",
      "term" : {
        "field" : "keyword",
        "size" : 1
      }
    }
  }
}

实现效果和后续改进

最终效果

参考资料

扫一扫 关注我的微信公众号
上一篇下一篇

猜你喜欢

热点阅读