当前位置: 技术文章>> Elasticsearch实战进阶之ElasticSearch推荐搜索选项Suggesters的API

文章标题:Elasticsearch实战进阶之ElasticSearch推荐搜索选项Suggesters的API
  • 文章分类: 后端
  • 22581 阅读

ElasticSearch提供了Suggesters API,可以帮助我们实现这些功能。本文将详细介绍Suggesters API的使用方法,并提供相关的代码示例。

一、Suggesters API介绍

Suggesters API提供了以下几种搜索建议:

Term Suggester:对输入的文本进行纠错,返回与输入文本最相似的文本。例如,“appl”输入错误,应该纠正为“apple”等。

Phrase Suggester:对输入的短语进行纠错,返回与输入短语最相似的短语。例如,“green appl”输入错误,应该纠正为“green apple”等。

Completion Suggester:提供自动完成提示功能,返回输入文本的前缀匹配项。例如,“app”输入后,应该自动提示“apple”等。

Context Suggester:根据上下文提供搜索建议,例如搜索商品时提供商品类型、品牌等建议。

在本文中,我们将以Completion Suggester为例进行介绍。

二、Completion Suggester使用方法

Completion Suggester需要在Mapping中进行配置,定义一个新的字段类型为“completion”,并指定要自动完成的字段名。例如,我们要在“title”字段上实现自动完成提示:

PUT /my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "title_suggest": { 
          "type": "completion",
          "analyzer": "simple",
          "preserve_separators": true,
          "preserve_position_increments": true,
          "max_input_length": 50,
          "contexts": [
            { 
              "name": "category", 
              "type": "category", 
              "path": "category" 
            },
            { 
              "name": "brand", 
              "type": "brand", 
              "path": "brand" 
            }
          ]
        }
      }
    }
  }
}

上述代码中,我们在“title_suggest”字段上定义了Completion Suggester,并指定了要自动完成的字段名为“title”。另外,我们指定了自动完成的分词器为“simple”,保留了分隔符和位置增量,并设置了输入长度限制为50。最后,我们定义了两个上下文,分别是“category”和“brand”,用于提供商品类型和品牌的搜索建议。

接下来,我们可以使用Suggesters API进行搜索建议。例如,我们要在“title”字段上搜索以“a”开头的自动完成建议:

GET /my_index/_search
{
  "suggest": {
    "title-suggest": {
      "prefix": "a",
      "completion": {
        "field": "title_suggest"
      }
    }
  }
}

上述代码中,我们使用了Suggesters API进行自动完成建议的搜索。其中,“title-suggest”是我们在Mapping中定义的Completion Suggester的名称,“prefix”指定了自动完成建议的前缀,即输入的文本,“field”指定了自动完成建议的字段名。

三、代码示例

下面给出一个完整的代码示例,演示如何使用Suggesters API实现自动完成提示功能:

PUT /my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "title_suggest": { 
          "type": "completion",
          "analyzer": "simple",
          "preserve_separators": true,
          "preserve_position_increments": true,
          "max_input_length": 50,
          "contexts": [
            { 
              "name": "category", 
              "type": "category", 
              "path": "category" 
            },
            { 
              "name": "brand", 
              "type": "brand", 
              "path": "brand" 
            }
          ]
        }
      }
    }
  }
}
POST /my_index/_bulk
{ "index": { "_index": "my_index", "_type": "my_type", "_id": "1" } }
{ "title": "Apple iPhone 11", "category": "Mobile Phone", "brand": "Apple" }
{ "index": { "_index": "my_index", "_type": "my_type", "_id": "2" } }
{ "title": "Samsung Galaxy S20", "category": "Mobile Phone", "brand": "Samsung" }
{ "index": { "_index": "my_index", "_type": "my_type", "_id": "3" } }
{ "title": "Sony WH-1000XM4", "category": "Headphone", "brand": "Sony" }
GET /my_index/_search
{
  "suggest": {
    "title-suggest": {
      "prefix": "a",
      "completion": {
        "field": "title_suggest"
      }
    }
  }
}

在上述代码中,我们首先创建了一个名为“my_index”的索引,并在其中定义了一个名为“my_type”的类型。然后,我们在“my_type”类型上定义了一个名为“title_suggest”的Completion Suggester,并指定了要自动完成的字段名为“title”。

接着,我们向索引中添加了三条文档,分别表示“Apple iPhone 11”、“Samsung Galaxy S20”和“Sony WH-1000XM4”。

最后,我们使用Suggesters API进行搜索建议,搜索以“a”开头的自动完成建议。运行代码后,我们可以看到返回的搜索建议中包含了“Apple iPhone 11”的标题,符合我们的搜索条件。

小结

本文介绍了ElasticSearch的Suggesters API,重点介绍了Completion Suggester的使用方法,并提供了相关的代码示例。Completion Suggester可以帮助我们实现自动完成提示功能,提高搜索体验。除此之外,ElasticSearch还提供了Term Suggester、Phrase Suggester和Context Suggester等多种搜索建议,可以根据实际需求选择使用。


推荐文章