【Elasticsearch】文本分析Text analysis概述

文本分析概述

文本分析使 Elasticsearch 能夠執行全文搜索,搜索結果會返回所有相關的結果,而不僅僅是完全匹配的結果。

如果你搜索“Quick fox jumps”,你可能希望找到包含“A quick brown fox jumps over the lazy dog”的文檔,你也可能希望找到包含相關詞匯(如“fast fox”或“foxes leap”)的文檔。

分析通過分詞實現全文搜索:將文本分解成更小的單元,稱為詞元。在大多數情況下,這些詞元是單獨的單詞。

如果你將短語“the quick brown fox jumps”作為一個單一字符串進行索引,而用戶搜索“quick fox”,那么它不會被視為匹配。然而,如果你對短語進行分詞并將每個單詞分別索引,查詢字符串中的術語就可以單獨查找。這意味著它們可以通過搜索“quick fox”“fox brown”或其他變體來匹配。

分詞使得能夠對單個術語進行匹配,但每個詞元仍然會逐字匹配。這意味著:

? 搜索“Quick”不會匹配“quick”,盡管你可能希望這兩個詞能夠相互匹配。

? 盡管“fox”和“foxes”有相同的詞根,但搜索“foxes”不會匹配“fox”,反之亦然。

? 搜索“jumps”不會匹配“leaps”。盡管它們沒有相同的詞根,但它們是同義詞,意思相近。

為了解決這些問題,文本分析可以將這些詞元規范化為標準格式。這使得你可以匹配那些與搜索詞不完全相同,但仍然足夠相關的詞元。例如:

? “Quick”可以轉換為小寫:“quick”。

? “foxes”可以進行詞干提取,即還原為詞根:“fox”。

? “jump”和“leap”是同義詞,可以索引為同一個詞:“jump”。

為了確保搜索詞能夠按預期匹配這些詞,你可以對查詢字符串應用相同的分詞和規范化規則。例如,搜索“Foxes leap”可以被規范化為搜索“fox jump”。

自定義文本分析

文本分析是由分析器執行的,它是一組規則,控制整個分析過程。

Elasticsearch 包含一個默認的分析器,稱為標準分析器,它在大多數情況下都能很好地工作。

如果你想定制搜索體驗,你可以選擇不同的內置分析器,甚至可以配置一個自定義的分析器。自定義分析器讓你能夠控制分析過程的每一步,包括:

? 在分詞之前對文本進行更改。

? 文本如何轉換為詞元。

? 在索引或搜索之前對詞元進行的規范化更改。

?

索引和搜索分析

文本分析發生在兩個時間點:

索引時間

當文檔被索引時,任何`text`字段的值都會被分析。

搜索時間

在對`text`字段執行全文搜索時,用戶正在搜索的查詢字符串(即用戶輸入的文本)會被分析。搜索時間也被稱為查詢時間。

在每個時間點使用的分析器(或分析規則集)分別被稱為索引分析器或搜索分析器。

索引分析器和搜索分析器如何協同工作

在大多數情況下,索引和搜索時應該使用相同的分析器。這可以確保字段的值和查詢字符串被轉換成相同形式的標記(tokens)。反過來,這可以確保在搜索期間標記能夠按預期匹配。

示例

一個文檔在`text`字段中索引了以下值:

```

The QUICK brown foxes jumped over the dog!

```

字段的索引分析器將值轉換為標記并對其進行規范化。在這個例子中,每個標記代表一個單詞:

```

[ quick, brown, fox, jump, over, dog ]

```

然后這些標記被索引。

稍后,用戶在同一個`text`字段中搜索以下內容:

用戶期望這個搜索能夠匹配之前索引的句子`The QUICK brown foxes jumped over the dog!`。

然而,查詢字符串并不包含文檔原始文本中使用的精確單詞:

? `Quick`vs`QUICK`

? `fox`vs`foxes`

為了應對這種情況,查詢字符串使用相同的分析器進行分析。這個分析器產生了以下標記:

為了執行搜索,Elasticsearch將這些查詢字符串標記與`text`字段中索引的標記進行比較。

?標記 查詢字符串 `text`字段??

?`quick` X X? ? ? ? ? ?

?`brown` X? ? ? ? ? ?

?`fox` X X? ? ? ? ? ?

?`jump` X? ? ? ? ? ?

?`over` X? ? ? ? ? ?

?`dog` X? ? ? ? ? ?

由于字段值和查詢字符串以相同的方式進行了分析,它們產生了類似的標記。標記`quick`和`fox`是精確匹配的。這意味著搜索匹配了包含`"The QUICK brown foxes jumped over the dog!"`的文檔,正如用戶所期望的那樣。

何時使用不同的搜索分析器

雖然不太常見,但在某些情況下,使用不同的索引和搜索分析器是有意義的。為此,Elasticsearch允許你為查詢字符串指定一個單獨的搜索分析器。

通常,只有在使用相同形式的標記對字段值和查詢字符串進行匹配時會創建意外或不相關的搜索結果時,才應該指定一個單獨的搜索分析器。

示例

Elasticsearch被用于創建一個搜索引擎,該引擎只匹配以提供的前綴開頭的單詞。例如,搜索`tr`應該返回`tram`或`trope`,但永遠不會返回`taxi`或`bat`。

一個文檔被添加到搜索引擎的索引中;該文檔在`text`字段中包含一個這樣的單詞:

字段的索引分析器將值轉換為標記并對其進行規范化。在這個例子中,每個標記代表一個可能的單詞前綴:

```

[ a, ap, app, appl, apple]

```

然后這些標記被索引。

稍后,用戶在同一個`text`字段中搜索以下內容:

用戶期望這個搜索只匹配以`appli`開頭的單詞,例如`appliance`或`application`。搜索不應該匹配`apple`。

然而,如果使用字段的索引分析器來分析這個查詢字符串,它會產生以下標記:

```

[ a, ap, app, appl, appli ]

```

當Elasticsearch將這些查詢字符串標記與`apple`索引的標記進行比較時,它會找到多個匹配項。

?標記 `appli` `apple`??

?`a` X X? ? ? ??

?`ap` X X? ? ? ??

?`app` X X? ? ? ??

?`appl` X X? ? ? ??

?`appli` X? ? ? ??

這意味著搜索會錯誤地匹配`apple`。不僅如此,它還會匹配任何以`a`開頭的單詞。

為了解決這個問題,你可以為`text`字段的查詢字符串指定一個不同的搜索分析器。

在這種情況下,你可以指定一個產生單個標記而不是一組前綴的搜索分析器:

這個查詢字符串標記只會匹配以`appli`開頭的單詞的標記,這更符合用戶的搜索期望。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895651.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895651.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895651.shtml

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

相關文章

建筑兔零基礎自學python記錄22|實戰人臉識別項目——視頻人臉識別(下)11

這次我們繼續解讀代碼,我們主要來看下面兩個部分; 至于人臉識別成功的要點我們在最后總結~ 具體代碼學習: #定義人臉名稱 def name():#預學習照片存放位置path M:/python/workspace/PythonProject/face/imagePaths[os.path.join(path,f) f…

二〇二四年終總結

寫在前面 簡單總結一下告訴自己,曾經活著 不必太糾結于當下,也不必太憂慮未來,當你經歷過一些事情的時候,眼前的風景已經和從前不一樣了。——村上春樹 原本應該 24 年年中的時候寫 23 年年終的總結,但是一直拖著&…

LabVIEW太陽能制冷監控系統

在全球能源需求日益增長的背景下,太陽能作為一種無限再生能源,被廣泛應用于各種能源系統中。本基于LabVIEW軟件和STM32F105控制器的太陽能制冷監控系統的設計與實現,提供一個高效、經濟的太陽能利用方案,以應對能源消耗的挑戰。 項…

Node.js中的npm包:從入門到實踐指南

目錄 一、npm的核心概念 二、npm核心命令與工作流 三、package.json深度解析 四、高級技巧與最佳實踐 五、常見問題解決方案 六、未來趨勢 在Node.js生態中,npm(Node Package Manager) 是開發者不可或缺的工具。它不僅是全球最大的開源軟…

AIGC圖生視頻保姆級教程

一、AI文生圖高階技巧 推薦工具 ? MidJourney(藝術感最強) ? DALLE 3(與ChatGPT深度聯動) ? Leonardo.ai(精細化參數控制) 核心策略 提示詞架構: [主體描述][環境氛圍][鏡頭語言][風格參數…

嵌入式EasyRTC實時通話支持海思hi3516cv610,編譯器arm-v01c02-linux-musleabi-gcc

EasyRTC已經完美支持海思hi3516cv610,編譯器arm-v01c02-linux-musleabi-gcc,總體SDK大小控制在680K以內(預計還能壓縮100K上下): EasyRTC在hi3516cv610芯片上能雙向通話、發送文字以及二進制指令,總體運行…

力扣做題記錄 (二叉樹)

二叉樹 打算先來了解二叉樹基礎,都是簡單題,目的是熟悉代碼格式和解題基礎思路。 1、二叉樹最大深度 二叉樹最大深度 方法一、深度搜索 直接用原函數做遞歸,比較簡單 /*** Definition for a binary tree node.* struct TreeNode {* …

如何下載Qt和運行第一個程序。

Ubuntu24.04 下載比較容易,基本都是無腦操作。途中匯出現有個別package下載不成功的情況,重新下載即可。 文章目錄 下載qt運行qt第一個項目 下載qt 1.先找到官網,點擊Download。 2.然后選擇,community User 3.然后會跳轉到這個…

HCIA項目實踐--靜態路由的拓展配置

7.7 靜態路由的拓展配置 網絡中的兩個重要思想: (1) 實的不行來虛的; (2) 范圍太大,劃分范圍。(分治) 7.7.1 負載均衡 (1)定義 負載均衡是一種網…

Base64 PDF解析器

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Base64 PDF解析器</title><style>body {font-family: Arial, sans-serif;max-width: 800px;margin: 20px auto;padding: 20px;}.contain…

基于51單片機的的雞籠補光和恒溫系統的設計與實現(源程序+Protues仿真+電路圖+元件清單+器件手冊)

編號&#xff1a;71 基于51單片機的的雞籠補光和恒溫系統的設計與實現 功能描述&#xff1a; 本設計由89C52單片機液晶12864顯示模塊聲光報警電路溫濕度傳感器電路風扇電路LED照明電路光照檢測電路GSM電路DS1302時鐘電路 1.實現的功能 (1)采用DHT11溫濕傳感器、光敏電阻捕捉…

Spring——Spring開發實戰經驗(1)

摘要 文章主要介紹了 Swagger 作為 API 文檔生成和測試工具的功能&#xff0c;包括自動生成 API 文檔、提供可視化調試界面、促進前后端協作、支持 OpenAPI 規范等。同時&#xff0c;還提及了 Spring Boot 與 Swagger3 的實戰應用&#xff0c;以及 Spring 開發中其他相關技術內…

SAP-ABAP:SAP的Screen Layout Designer屏幕布局設計器詳解及示例

在SAP中&#xff0c;Screen Layout Designer&#xff08;屏幕布局設計器&#xff09;是用于設計和維護屏幕&#xff08;Dynpro&#xff09;布局的工具。通過Screen Layout Designer&#xff0c;您可以創建和修改屏幕元素&#xff08;如輸入字段、按鈕、文本、表格控件等&#x…

安全筑基,智能賦能:BeeWorks IM引領企業協同新紀元

在數字經濟高速發展的今天&#xff0c;企業通訊系統已從單純的信息傳遞工具演變為支撐業務創新的核心平臺。傳統通訊工具在安全性、智能化、協同性等方面的不足&#xff0c;嚴重制約著企業的數字化轉型進程。BeeWorks IM系統以其創新的技術架構和智能化功能&#xff0c;正在重新…

SpringBoot實戰:高效獲取視頻資源

文章目錄 前言技術實現SpringBoot項目構建產品選取配置數據采集 號外號外 前言 在短視頻行業高速發展的背景下&#xff0c;海量內容數據日益增長&#xff0c;每天都有新的視頻、評論、點贊、分享等數據涌現。如何高效、精準地獲取并處理這些龐大的數據&#xff0c;已成為各大平…

【IoTDB 線上小課 11】為什么 DeepSeek 要選擇開源?

新年新氣象&#xff0c;【IoTDB 視頻小課】第十一期全新來臨&#xff01; 關于 IoTDB&#xff0c;關于物聯網&#xff0c;關于時序數據庫&#xff0c;關于開源... 一個問題重點&#xff0c;3-5 分鐘&#xff0c;我們講給你聽&#xff1a; 開源“加成”再次展現&#xff01; 現在…

宏任務和微任務

在前端開發中&#xff0c;**宏任務&#xff08;Macro Task&#xff09;**和**微任務&#xff08;Micro Task&#xff09;**是 JavaScript 事件循環&#xff08;Event Loop&#xff09;中的兩個重要概念。它們決定了異步代碼的執行順序。 --- ### 1. **事件循環&#xff08;Ev…

人工智能 - 機器學習、深度學習、強化學習是人工智能領域的理論基礎和方法論

機器學習、深度學習、強化學習是人工智能領域的三大核心方向,各自具有獨特的理論基礎和方法論。以下是它們的核心理論知識總結: 一、機器學習(Machine Learning, ML) 1. 基礎概念 目標:通過數據驅動的方式,讓機器從經驗中學習規律,完成預測、分類或決策任務。 核心范式…

java處理pgsql的text[]類型數據問題

背景 公司要求使用磐維數據庫&#xff0c;于是去了解了這個是基于PostgreSQL構建的&#xff0c;在使用時有場景一條圖片數據中可以投放到不同的頁面&#xff0c;由于簡化設計就放在數組中&#xff0c;于是使用了text[]類型存儲&#xff1b;表結構 #這是一個簡化版表結構&…

. Unable to find a @SpringBootConfiguration(默認軟件包中的 Spring Boot 應用程序)

解決&#xff1a; 新建一個包即可 問題&#xff1a; 默認軟件包中的 Spring Boot 應用程序。 原因&#xff1a; 默認包的定義 &#xff1a; 如果一個 Java 類沒有使用 package 聲明包名&#xff0c;則該類會被放置在默認包中。Spring Boot 遵循 Java 的包管理約定&#xff…