Elasticsearch搜索建议

2023-05-09 07:22:53 浏览数 (1)

概述

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,即总是返回建议结果。

0 人点赞