当前位置: 首页 > backend >正文

【Elasticsearch】suggest

在Elasticsearch中,`suggest` 是一个非常强大的功能,用于实现自动补全、拼写纠错和模糊搜索等功能。它可以帮助用户更快地找到他们想要的内容,同时提升搜索体验。以下是关于 `suggest` 的详细使用方法和常见场景。

 

1\. Suggest 的基本概念

 

`suggest` 是一个查询组件,通常与搜索请求一起发送。它可以根据用户的输入提供相关的建议,帮助用户更快速地完成搜索。`suggest` 支持多种类型,包括:

 

- Term Suggest(拼写纠错):用于纠正用户输入中的拼写错误。

- Phrase Suggest(短语建议):基于上下文提供完整的短语建议。

- Completion Suggest(自动补全):用于实现自动补全功能,通常用于搜索框中的实时建议。

- Context Suggest(上下文建议):结合上下文信息(如分类、标签等)提供更精准的建议。

 

2\. Term Suggest(拼写纠错)

 

`term suggest` 是一种基于用户输入的拼写纠错功能。它会根据索引中的数据,找出最接近的正确拼写。

 

示例

 

假设我们有一个索引 `products`,其中包含以下文档:

 

```json

{

  "product_name": "Apple iPhone 13"

}

{

  "product_name": "Samsung Galaxy S21"

}

```

 

如果用户输入了一个拼写错误的查询,例如 `iphne`,我们可以使用 `term suggest` 来纠正拼写:

 

```json

POST /products/_search

{

  "suggest": {

    "product-suggest": {

      "text": "iphne",

      "term": {

        "field": "product_name"

      }

    }

  }

}

```

 

返回结果可能如下:

 

```json

{

  "suggest": {

    "product-suggest": [

      {

        "text": "iphne",

        "offset": 0,

        "length": 5,

        "options": [

          {

            "text": "iphone",

            "score": 0.8,

            "freq": 1

          }

        ]

      }

    ]

  }

}

```

 

3\. Phrase Suggest(短语建议)

 

`phrase suggest` 可以根据用户的输入提供完整的短语建议。它通常用于纠正拼写错误并提供更自然的短语。

 

示例

 

假设用户输入了 `galax s21`,我们可以使用 `phrase suggest` 来提供更准确的短语建议:

 

```json

POST /products/_search

{

  "suggest": {

    "product-suggest": {

      "text": "galax s21",

      "phrase": {

        "field": "product_name",

        "size": 1

      }

    }

  }

}

```

 

返回结果可能如下:

 

```json

{

  "suggest": {

    "product-suggest": [

      {

        "text": "galax s21",

        "offset": 0,

        "length": 10,

        "options": [

          {

            "text": "Samsung Galaxy S21",

            "score": 0.9,

            "collate_match": true

          }

        ]

      }

    ]

  }

}

```

 

4\. Completion Suggest(自动补全)

 

`completion suggest` 是实现自动补全功能的最常用方式。它通常用于搜索框中的实时建议。

 

示例

 

首先,我们需要在索引中定义一个 `completion` 类型的字段。例如:

 

```json

PUT /products

{

  "mappings": {

    "properties": {

      "suggest_field": {

        "type": "completion"

      }

    }

  }

}

```

 

然后,插入一些数据:

 

```json

POST /products/_doc/1

{

  "suggest_field": "Apple iPhone 13"

}

 

POST /products/_doc/2

{

  "suggest_field": "Samsung Galaxy S21"

}

```

 

接下来,使用 `completion suggest` 提供自动补全建议:

 

```json

POST /products/_search

{

  "suggest": {

    "product-suggest": {

      "prefix": "iph",

      "completion": {

        "field": "suggest_field"

      }

    }

  }

}

```

 

返回结果可能如下:

 

```json

{

  "suggest": {

    "product-suggest": [

      {

        "text": "iph",

        "offset": 0,

        "length": 3,

        "options": [

          {

            "text": "Apple iPhone 13",

            "score": 1.0

          }

        ]

      }

    ]

  }

}

```

 

5\. Context Suggest(上下文建议)

 

`context suggest` 可以结合上下文信息(如分类、标签等)提供更精准的建议。

 

示例

 

假设我们有一个带有上下文的索引:

 

```json

PUT /products

{

  "mappings": {

    "properties": {

      "suggest_field": {

        "type": "completion",

        "contexts": {

          "category": {

            "type": "category"

          }

        }

      }

    }

  }

}

```

 

插入数据时,指定上下文:

 

```json

POST /products/_doc/1

{

  "suggest_field": {

    "input": "Apple iPhone 13",

    "contexts": {

      "category": "electronics"

    }

  }

}

 

POST /products/_doc/2

{

  "suggest_field": {

    "input": "Samsung Galaxy S21",

    "contexts": {

      "category": "electronics"

    }

  }

}

```

 

查询时,指定上下文:

 

```json

POST /products/_search

{

  "suggest": {

    "product-suggest": {

      "prefix": "iph",

      "completion": {

        "field": "suggest_field",

        "contexts": {

          "category": "electronics"

        }

      }

    }

  }

}

```

 

返回结果会根据上下文过滤,只返回与 `electronics` 类别相关的建议。

 

6\. 总结

 

`suggest` 是Elasticsearch中用于提升用户体验的强大工具。通过 `term suggest`、`phrase suggest`、`completion suggest` 和 `context suggest`,你可以实现拼写纠错、短语建议、自动补全和上下文过滤等功能。根据具体需求选择合适的建议类型,可以显著提升搜索的准确性和效率。

http://www.xdnf.cn/news/9858.html

相关文章:

  • C++17常量
  • 【Python办公】将Excel表格转json(字典)数据-可自定义key和value
  • TeleAI发布TeleChat2.5及T1正式版,双双开源上线魔乐社区!
  • 实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.6 R语言解题
  • ubuntu mysql 8.0.42 基于二进制日志文件位置和GTID主从复制配置
  • 玛哈特校平机:金属板材加工的精整专家
  • 记一次 Starrocks be 内存异常宕机
  • Ubuntu20.04操作系统ssh开启oot账户登录
  • 大数据学习(125)-hive数据分析
  • HOW - 简历和求职面试宝典(七)
  • 整数加减法测试题
  • API网关和API管理的区别
  • 【PCB工艺】绘制原理图 + PCB设计大纲:最小核心板STM32F103ZET6
  • Day39
  • remote: error: hook declined to update refs/heads.....
  • DrissionPage ChromiumPage模式:浏览器自动化的高效利器
  • 【PhysUnits】15.1 引入P1后的加一特质(add1.rs)
  • DeepSeekMath:突破开放式语言模型中数学推理能力的极限
  • 百度之星2024 初赛第一场 补给
  • 一键提取Office内图片的工具
  • MySQL 数据库调优指南:提升性能的全面策略
  • 【第4章 图像与视频】4.4 离屏 canvas
  • 前端开源JavaScrip库
  • uniapp+ts模拟popup弹出框(下拉框)
  • 【Kubernetes】ubuntu20.04通过kubeadm + Docker安装k8s
  • 进程间通信(共享内存)
  • Maven 仓库类型与镜像策略
  • aws instance store 的恢复
  • 【仿生系统】爱丽丝的“内在”或“灵魂”:概念与形式
  • C语言进阶--字符串+内存函数