【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.pswp.cn/diannao/85305.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85305.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85305.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[SAP] 如何查詢當前屏幕的Tcode?

事務代碼Tcode是SAP中到達特定屏幕的快捷路徑 如何查詢以下屏幕的事務碼Tcode? 要瀏覽當前所使用的屏幕的事務碼,可以選擇System | Status 這里的事務代碼是[VA22],它是Change Quotation的事務代碼

PostgreSQL的擴展 dblink

PostgreSQL的擴展 dblink dblink 是 PostgreSQL 的一個核心擴展,允許在當前數據庫中訪問其他 PostgreSQL 數據庫的數據,實現跨數據庫查詢功能。 一、dblink 擴展安裝與啟用 1. 安裝擴展 -- 使用超級用戶安裝 CREATE EXTENSION dblink;2. 驗證安裝 -…

ADB推送文件到指定路徑解析

您執行的命令 adb push ota.zip /sdcard/Download 中,目標路徑 /sdcard/Download 是您顯式指定的,因此 ADB 會直接將文件推送到此位置。具體過程如下: 1. 命令結構解析 adb push:ADB 的推送指令。ota.zip:本地計算機上…

Linux 內核中 skb_orphan 的深度解析:從版本差異到核心機制

引言 在 Linux 內核網絡子系統中,struct sk_buff(簡稱 skb)是管理網絡數據包的核心數據結構。skb_orphan 作為其生命周期管理的關鍵函數,負責切斷 skb 與所屬 socket 的關聯,確保數據包在復雜處理流程中的獨立性。本文將從代碼實現、版本差異、使用場景等多個維度,深入解…

03.MySQL表的操作詳解

MySQL表的操作詳解 MySQL 表的操作概述創建表 2.1 創建表的基本語法查看表結構修改表 4.1 新增列 4.2 修改列屬性 4.3 修改列名 4.4 修改表名 4.5 刪除列刪除表 1. MySQL表的操作概述 MySQL表的操作是數據庫開發和管理中的核心內容,主要涉及**數據定義語言&#…

Flink系列文章列表

把寫的文章做一個匯總,會陸續更新的。 Flink流處理原理與實踐:狀態管理、窗口操作與容錯機制-CSDN博客

【目標檢測】【AAAI-2022】Anchor DETR

Anchor DETR: Query Design for Transformer-Based Object Detection 錨點DETR:基于Transformer的目標檢測查詢設計 論文鏈接 代碼鏈接 摘要 在本文中,我們提出了一種基于Transformer的目標檢測新型查詢設計。此前的Transformer檢測器中&am…

apptrace 的優勢以及對 App 的價值

官網地址:AppTrace - 專業的移動應用推廣追蹤平臺 apptrace 的優勢以及對 App 的價值? App 拉起作為移動端深度鏈接技術的關鍵應用,能實現從 H5 網頁到 App 的無縫跳轉,并精準定位到 App 內指定頁面。apptrace 憑借專業的技術與豐富的經驗…

16-前端Web實戰(Tlias案例-部門管理)

在前面的課程中,我們學習了Vue工程化的基礎內容、TS、ElementPlus,那接下來呢,我們要通過一個案例,加強大家對于Vue項目的理解,并掌握Vue項目的開發。 這個案例呢,就是我們之前所做的Tlias智能學習輔助系統…

Python爬蟲實戰:研究Goutte庫相關技術

1. 引言 1.1 研究背景與意義 隨著互聯網信息的爆炸式增長,如何高效、準確地獲取和分析 Web 數據成為重要研究課題。網絡爬蟲作為自動獲取網頁內容的關鍵技術,在搜索引擎優化、輿情分析、市場調研等領域具有廣泛應用。然而,現代網站越來越多地采用 JavaScript 動態渲染技術…

Python----目標檢測(《基于區域提議網絡的實時目標檢測方法》和Faster R-CNN)

一、《基于區域提議網絡的實時目標檢測方法》 1.1、基本信息 標題:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 作者:任少卿(中國科學技術大學、微軟研究院)、何凱明(微軟研究…

吳恩達講解MCP基礎概念

簡介 MCP 是一個開放協議 標準化了您的語言模型應用如何獲取工具和數據資源的上下文。基于客戶端-服務器架構,它定義了您的語言模型應用中的MCP客戶端與MCP服務器之間的通信方式,MCP服務器提供工具 數據資源和提示模板給您的應用,自Anthropic于2024年11月推出MCP以來,MCP生…

Git入門到精通:30分鐘掌握核心技巧

目錄 一、基礎理論片 Git簡介 Git安裝 Git倉庫 Git基本命令用法 倉庫別名 二、實操命令篇 遠程分支 分支的新建和合并 實操演示 1 本地新建倉庫 2 gitee新建倉庫 3 建立關系 4 新建分支 5 開發新功能 6 推送新分支 7 合并新分支到主分支 三、可視化工具篇 G…

零基礎設計模式——結構型模式 - 代理模式

第三部分:結構型模式 - 代理模式 (Proxy Pattern) 在學習了享元模式如何通過共享對象來優化資源使用后,我們來探討結構型模式的最后一個模式——代理模式。代理模式為另一個對象提供一個替身或占位符以控制對這個對象的訪問。 核心思想:為其…

【OSS】 前端如何直接上傳到OSS 上返回https鏈接,如果做到OSS圖片資源加密訪問

使用阿里云OSS(對象存儲服務)進行前端直接上傳并返回HTTPS鏈接,同時實現圖片資源的加密訪問,可以通過以下步驟實現: 前端直接上傳到OSS并返回HTTPS鏈接 設置OSS Bucket: 確保你的OSS Bucket已創建&#xf…

TDenigne 集群可視化管理

可視化管理工具 為方便用戶更高效地使用和管理 TDengine,TDengine 3.0 版本推出了一個全新的可視化組件 taosExplorer。這個組件旨在幫助用戶在不熟悉 SQL 的情況下,也能輕松管理 TDengine 集群。通過 taosExplorer,用戶可以輕松查看 TDengi…

Centos7安裝gitlab

環境準備: 操作系統:Centos7 內存:2G以上 磁盤:50G 安全:關閉防火墻,selinux 1、安裝GitLab所需依賴 yum -y install policycoreutils openssh-server openssh-clients postfix 2、設置postfix開機自啟…

【前端面經】云智慧一面

寫在前面:面經只是記錄博主遇到的題目。每題的答案在編寫文檔的時候已經有問過deepseek,它只是一種比較普世的答案,要學得深入還是靠自己 Q:手撕代碼,兩個有序數組排序 A: function mysort(arr1, arr2) {…

Leetcode 3568. Minimum Moves to Clean the Classroom

Leetcode 3568. Minimum Moves to Clean the Classroom 1. 解題思路2. 代碼實現 題目鏈接:3568. Minimum Moves to Clean the Classroom 1. 解題思路 這一題我的核心思路就是廣度優先遍歷遍歷剪枝。 顯然,我們可以給出一個廣度優先遍歷來給出所有可能…

Spring Boot,注解,@RestController

RestController 是 Spring MVC 中用于創建 RESTful Web 服務的核心注解。 RestController 核心知識點 REST 作用: RestController 是一個方便的組合注解,它結合了 Controller 和 ResponseBody 兩個注解。 Controller: 將類標記為一個控制器,使其能夠處理…