Elasticsearch:使用 Elasticsearch 进行语义搜索
- - 掘金 后端在数字时代,搜索引擎在通过浏览互联网上的大量可用信息来检索数据方面发挥着重要作用. 此方法涉及用户在搜索栏中输入特定术语或短语,期望搜索引擎返回与这些确切关键字匹配的结果. 虽然关键字搜索对于简化信息检索非常有价值,但它也有其局限性. 主要缺点之一在于它对词汇匹配的依赖. 关键字搜索将查询中的每个单词视为独立的实体,通常会导致结果可能与用户的意图不完全一致.
搜索建议是搜索的一个重要组成部分,一个搜索建议的实现通常需要考虑建议词的来源、匹配、排序、聚合、关联的文档数和拼写纠错等,本文介绍一个基于Elasticsearch实现的搜索建议。
电商网站的搜索是最基础最重要的功能之一,搜索框上面的良好体验能为电商带来更高的收益,我们先来看看淘宝、京东、亚马逊网站的搜索建议。
在淘宝的搜索框输入【卫衣】时,下方的搜索建议包括建议词以及相关的标签:
在京东的搜索框输入【卫衣】时,下方搜索建议右方显示建议词关联的商品数量:
在亚马逊的搜索框输入【卫衣】时,搜索建议上部分能支持在特定的分类下进行搜索:
通过上述对比可以看出,不同的电商对于搜索建议的侧重点略有不同,但核心的问题包括:
在我们的搜索建议实现里,主要考虑了建议词的来源、匹配、排序、关联的商品数量和拼写纠错。
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
}
}
}
}