概述
Elasticsearch 提供了搜索建议(suggesters)功能,可以帮助用户快速、准确地搜索相关的文档。搜索建议是一种自动完成(autocomplete)的技术,用户只需要输入部分关键字,搜索引擎就会自动完成剩余的内容,并返回相关的文档。搜索建议通常用于搜索引擎、电商网站等需要快速、准确地搜索大量数据的应用场景。
搜索建议的类型
Elasticsearch 提供了多种类型的搜索建议,包括:
完整词建议(Term Suggester)
完整词建议是最基本的搜索建议类型,它会根据用户输入的关键字,返回与之匹配的完整词。例如,如果用户输入“Elasticser”,搜索引擎会自动补全为“Elasticsearch”,并返回相关的文档。
短语建议(Phrase Suggester)
短语建议是一种更高级的搜索建议类型,它会根据用户输入的关键字,返回与之匹配的短语。例如,如果用户输入“how to us”, 搜索引擎会自动补全为“how to use Elasticsearch”,并返回相关的文档。
自动纠错建议(Did You Mean Suggester)
自动纠错建议是一种自动校正用户输入错误的搜索建议类型,它会根据用户输入的关键字,自动检测并纠正错误的拼写、语法等问题,并返回相关的文档。例如,如果用户输入“Elastserach”,搜索引擎会自动纠正为“Elasticsearch”,并返回相关的文档。
补全建议(Completion Suggester)
补全建议是一种自动补全用户输入的搜索建议类型,它会根据用户输入的前缀,返回所有以该前缀开头的文档。例如,如果用户输入“Elast”,搜索引擎会返回所有以“Elast”开头的文档,如“Elasticsearch”、“Elastic Cloud”等。
示例
首先,我们需要创建一个索引,并向其中添加一些文档:
代码语言:javascript复制PUT /my_index
{
"mappings": {
"properties": {
"title": {
"type": "text"
},
"content": {
"type": "text"
}
}
}
}
POST /my_index/_doc
{
"title": "Elasticsearch tutorial",
"content": "This is a tutorial on how to use Elasticsearch"
}
POST /my_index/_doc
{
"title": "Elasticsearch reference",
"content": "This is the Elasticsearch reference documentation"
}
在上面的例子中,我们创建了一个名为 my_index 的索引,并向其中添加了两个文档。每个文档包含一个标题(title)和一个内容(content)字段。
接下来,我们使用完整词建议来搜索文档。首先,我们需要为索引添加一个完整词建议器(Term Suggester):
代码语言:javascript复制POST /my_index/_search
{
"suggest": {
"text": "Elastser",
"simple_phrase": {
"phrase": {
"field": "title",
"size": 1,
"gram_size": 1,
"direct_generator": [{
"field": "title",
"suggest_mode": "always"
}]
}
}
}
}
在上面的例子中,我们向搜索请求中添加了一个完整词建议器。该建议器会根据用户输入的文本(text),返回与之匹配的完整词。在本例中,我们输入的文本为“Elastser”,搜索引擎会自动补全为“Elasticsearch”,并返回相关的文档。其中,simple_phrase 表示搜索建议类型为完整词建议,phrase 表示搜索建议器类型为短语建议器,field 表示搜索建议器针对的字段为标题(title),size 表示返回结果的最大数量为 1,gram_size 表示搜索建议器生成的词元的长度为 1,direct_generator 表示搜索建议器生成的词元来源为标题(title),suggest_mode 表示搜索建议器的建议模式为 always,即总是返回建议结果。