文章目录
1 前言
在上章介绍完 bool 查询后。我们接下来介绍搜索最常被使用的功能:搜索建议、搜索纠错。
在 ES 中的 Suggesters
API 中有以下 4 个 API
Term suggester
Phrase Suggester
Completion Suggester
Context Suggester
本文,因章幅原因,以及开发中使用频率,只选择讲解Term suggester
,Context Suggester
。更多内容请阅读 Suggesters API
2 Term Suggester
2.1 基本介绍
返回与输入的文本相似的 terms。在日常开发中,我们可以使用 term suggest 作为拼写纠错来使用。例如以下应用场景:
2.2 使用 demo
写入数据
POST test6/_doc
{
"intro": "apple fruits applz"
}
POST test6/_doc
{
"intro": "grapes fruit grapz"
}
POST test6/_doc
{
"intro": "banana fruit bannnn"
}
查询语法
GET test6/_search
{
"suggest": {
"my_suggest": { ①
"text": "banane", ②
"term": {
"field": "intro" ③
}
}
}
}
- ①:自定义的名词
- ②:用户输入的文本
- ③:被检索的字段
2.3 常用参数
2.3.1 suggest_mode
该参数有 3 个枚举值
- missing:如果用户输入的文本存在于文档中,则不推荐。适用于拼写检查
- popular:只推荐比用户输入的文本出现频率更高的 term。适用于推荐更流行的词
- always:无论用户输入的文本是否存在于文档中,都推荐。
love apples
会被分词为 love
, apples
,这 2 个词都不存在于文档中。ES 文档中有 apple
这个词,就推荐了。
GET test6/_search
{
"suggest": {
"my_suggest": {
"text": "love apples",
"term": {
"field": "intro",
"suggest_mode": "missing"
}
}
}
}
文档中存在 fruit
, fruits
。但是 fruit
出现的频率大于 fruits
因此 fruit
被推荐。
GET test6/_search
{