1.ElasticSearch概述
Elasticsearch 是一個(gè)開(kāi)源的搜索引擎,建立在 Apache Lucene? 基礎(chǔ)上。它被廣泛用于全文搜索、結(jié)構(gòu)化搜索、分析以及將這些功能組合在一起的復(fù)雜搜索用例。以下是 Elasticsearch 的一些關(guān)鍵特點(diǎn)和功能:
-
分布式和可擴(kuò)展性:Elasticsearch 是分布式的,這意味著它可以處理大量數(shù)據(jù)并在多個(gè)服務(wù)器之間分配這些數(shù)據(jù)。這種分布式特性使其具備高可擴(kuò)展性和容錯(cuò)能力。
-
實(shí)時(shí)搜索:Elasticsearch 能夠提供幾乎實(shí)時(shí)的搜索結(jié)果。這是通過(guò)其倒排索引機(jī)制實(shí)現(xiàn)的,該機(jī)制允許快速的文本搜索。
-
全文搜索:Elasticsearch 支持強(qiáng)大的全文搜索功能,使其能夠搜索文本文檔中的任何詞。
-
多種語(yǔ)言處理:它支持多種語(yǔ)言,能夠理解不同語(yǔ)言的詞匯和語(yǔ)法。
-
RESTful API:Elasticsearch 提供了一個(gè)基于 REST 的 API,這意味著你可以使用 HTTP 方法(如 GET、POST、PUT、DELETE)與 Elasticsearch 交互。
-
數(shù)據(jù)分析和聚合:Elasticsearch 不僅僅是一個(gè)搜索引擎。它還提供了強(qiáng)大的分析和聚合工具,使其成為一個(gè)有效的數(shù)據(jù)分析平臺(tái)。
-
靈活性:Elasticsearch 可以存儲(chǔ)、搜索和分析各種類(lèi)型的數(shù)據(jù),包括文本、數(shù)字、地理位置、結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)等。
-
集成:它可以輕松地與各種數(shù)據(jù)源(如日志、事務(wù)數(shù)據(jù)、消息隊(duì)列等)集成,并與其他 Elastic Stack 組件(如 Kibana、Logstash、Beats)配合使用,提供完整的數(shù)據(jù)分析解決方案。
-
安全性:Elasticsearch 提供了多層安全特性,包括角色基礎(chǔ)的訪問(wèn)控制、加密等。
-
社區(qū)和生態(tài)系統(tǒng):作為一個(gè)開(kāi)源項(xiàng)目,Elasticsearch 擁有一個(gè)活躍的開(kāi)發(fā)者社區(qū)和一個(gè)豐富的插件生態(tài)系統(tǒng)。
Elasticsearch 的這些特性使其成為一個(gè)強(qiáng)大而靈活的搜索和分析工具,適用于各種規(guī)模和類(lèi)型的項(xiàng)目。
2.ElasticSearch下載與安裝
Elasticsearch 的下載和安裝過(guò)程相對(duì)簡(jiǎn)單。以下是基本步驟,適用于大多數(shù)標(biāo)準(zhǔn)安裝場(chǎng)景:
1. 系統(tǒng)要求
在安裝 Elasticsearch 之前,請(qǐng)確保你的系統(tǒng)符合以下要求:
- Java:Elasticsearch 需要 Java 運(yùn)行環(huán)境。通常需要 Java 8 或更高版本。
- 操作系統(tǒng):Elasticsearch 可以在多種操作系統(tǒng)上運(yùn)行,包括 Linux、Windows 和 macOS。
2. 下載 Elasticsearch
訪問(wèn) Elasticsearch 的官方網(wǎng)站下載頁(yè)面 Elasticsearch Download。選擇適合你的操作系統(tǒng)的版本進(jìn)行下載。
3. 安裝 Elasticsearch
在 Linux 上
- 解壓下載的文件。使用命令行,可以使用類(lèi)似下面的命令:
tar -xzf elasticsearch-<version>.tar.gz
- 進(jìn)入解壓后的 Elasticsearch 目錄。
- 啟動(dòng) Elasticsearch,通過(guò)執(zhí)行:
./bin/elasticsearch
在 Windows 上
- 解壓下載的 ZIP 文件。
- 打開(kāi)解壓后的文件夾。
- 運(yùn)行
bin\elasticsearch.bat
文件以啟動(dòng) Elasticsearch。
在 macOS 上
可以使用 Homebrew 來(lái)安裝 Elasticsearch:
brew tap elastic/tap
brew install elastic/tap/elasticsearch-full
然后啟動(dòng) Elasticsearch:
elasticsearch
4. 驗(yàn)證安裝
在瀏覽器或命令行中訪問(wèn) http://localhost:9200
。如果 Elasticsearch 正在運(yùn)行,你將看到一條消息,即You Know, for Search,其中還包含集群、節(jié)點(diǎn)和版本的信息。
5. 注意事項(xiàng)
-
配置:根據(jù)需要,你可以修改
config/elasticsearch.yml
文件中的配置設(shè)置。 - 安全設(shè)置:考慮配置 Elasticsearch 的安全設(shè)置,如啟用 X-Pack 安全性。
-
內(nèi)存設(shè)置:可能需要調(diào)整 JVM 的堆大小,這可以在
config/jvm.options
文件中進(jìn)行設(shè)置。
以上是基本的安裝步驟。具體步驟可能會(huì)根據(jù)你的操作系統(tǒng)和具體需求有所不同。請(qǐng)參考 Elasticsearch 的官方文檔,以獲取更詳細(xì)的安裝指南和最佳實(shí)踐。
3.Elasticsearch-head下載與安裝
“Elasticsearch-head” 是一個(gè)基于 Web 的界面,用于管理和監(jiān)控 Elasticsearch 集群。它是一個(gè)社區(qū)驅(qū)動(dòng)的項(xiàng)目,提供了一個(gè)簡(jiǎn)單直觀的界面來(lái)執(zhí)行各種 Elasticsearch 操作,如查看集群狀態(tài)、創(chuàng)建和刪除索引、執(zhí)行查詢等。下面是 Elasticsearch-head 的安裝和使用指南:
1. 安裝 Elasticsearch-head
有兩種主要方式安裝 Elasticsearch-head:
1.作為 Elasticsearch 插件安裝(適用于 Elasticsearch 5.x 及以下)
-
安裝插件:
在 Elasticsearch 安裝目錄下執(zhí)行以下命令:./bin/elasticsearch-plugin install mobz/elasticsearch-head
-
重啟 Elasticsearch:
重新啟動(dòng) Elasticsearch 以激活插件。
2.作為獨(dú)立的 Node.js 應(yīng)用運(yùn)行(適用于所有版本,推薦)
-
安裝 Node.js:
確保你的系統(tǒng)上安裝了 Node.js。 -
克隆 Git 倉(cāng)庫(kù):
克隆 elasticsearch-head 的 GitHub 倉(cāng)庫(kù):git clone https://github.com/mobz/elasticsearch-head.git
-
安裝依賴:
進(jìn)入elasticsearch-head
目錄并安裝依賴:cd elasticsearch-head npm install
-
運(yùn)行 Elasticsearch-head:
在elasticsearch-head
目錄中運(yùn)行:npm run start
這將在
http://localhost:9100/
啟動(dòng) Elasticsearch-head。
2. 使用 Elasticsearch-head
-
訪問(wèn) Web 界面:
在 Web 瀏覽器中打開(kāi)http://localhost:9100/
(如果作為 Node.js 應(yīng)用運(yùn)行)或 Elasticsearch 的插件 URL(如果作為插件安裝)。 -
連接到 Elasticsearch 集群:
默認(rèn)情況下,elasticsearch-head 會(huì)嘗試連接到http://localhost:9200
。如果你的 Elasticsearch 集群運(yùn)行在不同的地址或端口上,你需要在地址欄中輸入正確的 URL。 -
瀏覽和管理集群:
使用 Elasticsearch-head 的各種功能來(lái)管理你的 Elasticsearch 集群。你可以查看集群健康、瀏覽數(shù)據(jù)、執(zhí)行查詢和修改數(shù)據(jù)等。
3. 注意事項(xiàng)
-
跨域問(wèn)題:如果你作為 Node.js 應(yīng)用運(yùn)行 elasticsearch-head,可能需要在 Elasticsearch 的配置文件 (
elasticsearch.yml
) 中設(shè)置允許跨域請(qǐng)求,例如:http.cors.enabled: true http.cors.allow-origin: "*"
- 安全性:考慮到安全性,不建議在生產(chǎn)環(huán)境中啟用跨域請(qǐng)求或?qū)?Elasticsearch-head 公開(kāi)到互聯(lián)網(wǎng)。
Elasticsearch-head 是一個(gè)非常實(shí)用的工具,特別適合于 Elasticsearch 新手或那些希望通過(guò)可視化界面進(jìn)行集群管理的用戶。然而,隨著 Elasticsearch 版本的更新,部分功能可能不再與最新版本的 Elasticsearch 完全兼容。因此,始終建議檢查兼容性并關(guān)注最新的開(kāi)發(fā)動(dòng)態(tài)。
這個(gè)ElasticSearch-head就把它當(dāng)作數(shù)據(jù)展示工具即可,后面所有的查詢都在Kibana里面做即可!
4.Kibana概述
Kibana 是 Elasticsearch 的官方開(kāi)源數(shù)據(jù)可視化工具,專(zhuān)為 Elasticsearch 設(shè)計(jì)。它提供了一個(gè)強(qiáng)大的界面,用于搜索、查看和交互存儲(chǔ)在 Elasticsearch 索引中的數(shù)據(jù)。Kibana 讓用戶能夠以圖表、圖形和地圖的形式直觀地展示和分析數(shù)據(jù)。以下是 Kibana 的一些主要特點(diǎn)和功能:
1.數(shù)據(jù)可視化與儀表板
- 多樣化的可視化選項(xiàng):Kibana 支持多種類(lèi)型的圖表,包括折線圖、柱狀圖、餅圖、散點(diǎn)圖、熱力圖和地圖等。
- 交互式儀表板:用戶可以創(chuàng)建包含多種可視化組件的儀表板,這些儀表板可以展示實(shí)時(shí)數(shù)據(jù),并與用戶的操作實(shí)時(shí)交互。
2.搜索與分析
- 強(qiáng)大的搜索功能:Kibana 利用 Elasticsearch 的搜索能力,允許用戶快速檢索大量數(shù)據(jù)。
- 數(shù)據(jù)過(guò)濾與聚合:用戶可以對(duì)數(shù)據(jù)進(jìn)行過(guò)濾、排序和聚合,以更深入地分析數(shù)據(jù)。
3.Elasticsearch 集成
- 無(wú)縫集成 Elasticsearch:Kibana 與 Elasticsearch 緊密集成,使得從數(shù)據(jù)索引到分析和可視化的過(guò)程非常流暢。
- 索引管理:Kibana 提供索引管理功能,允許用戶查看和管理 Elasticsearch 索引。
4.地理空間數(shù)據(jù)分析
- 地圖可視化:Kibana 支持地理空間數(shù)據(jù)的可視化,包括使用地圖來(lái)展示數(shù)據(jù)點(diǎn)、形狀和熱力圖。
5.擴(kuò)展功能
- Machine Learning:Kibana 通過(guò) X-Pack 集成機(jī)器學(xué)習(xí)功能,可以用于識(shí)別數(shù)據(jù)中的異常模式、時(shí)間序列分析等。
- 日志與指標(biāo)分析:Kibana 特別適合于日志數(shù)據(jù)和指標(biāo)數(shù)據(jù)的分析,與 Beats 和 Logstash 等工具一起使用時(shí)更加強(qiáng)大。
6.安全與管理
- 安全性和訪問(wèn)控制:通過(guò) X-Pack,Kibana 提供安全功能,包括角色基于的訪問(wèn)控制、加密和審計(jì)日志。
- 空間管理:Kibana 允許創(chuàng)建多個(gè)“空間”,每個(gè)空間可以有自己的儀表板、可視化和索引模式,適用于多團(tuán)隊(duì)或項(xiàng)目。
7.用戶友好的界面
- 易于使用的 UI:Kibana 的用戶界面直觀易用,使得即使是非技術(shù)用戶也能輕松上手。
- 自定義和共享:用戶可以自定義儀表板和可視化,也可以與團(tuán)隊(duì)成員共享。
8.應(yīng)用場(chǎng)景
Kibana 適用于各種數(shù)據(jù)分析和可視化需求,如日志分析、實(shí)時(shí)數(shù)據(jù)監(jiān)控、安全分析、業(yè)務(wù)智能等。
總的來(lái)說(shuō),Kibana 是一個(gè)功能豐富、靈活且用戶友好的數(shù)據(jù)可視化工具,它使得從簡(jiǎn)單的數(shù)據(jù)探索到復(fù)雜的數(shù)據(jù)分析和可視化變得容易和高效。隨著 Elasticsearch 生態(tài)系統(tǒng)的不斷發(fā)展,Kibana 也在持續(xù)增加新的功能和改進(jìn),以滿足日益增長(zhǎng)的數(shù)據(jù)分析需求。
5.Kibana安裝
安裝 Kibana 是一個(gè)直接的過(guò)程,但需要確保 Elasticsearch 已經(jīng)安裝并運(yùn)行在你的系統(tǒng)上,因?yàn)?Kibana 是作為 Elasticsearch 的前端界面運(yùn)行的。下面是 Kibana 的基本下載和安裝步驟:
1. 系統(tǒng)要求
- 確保你的系統(tǒng)已經(jīng)安裝了 Elasticsearch。
- 確保你的系統(tǒng)滿足 Kibana 的運(yùn)行要求,包括適當(dāng)?shù)牟僮飨到y(tǒng)和兼容的 Java 版本(如果適用)。
2. 下載 Kibana
- 訪問(wèn) Elasticsearch 的官方網(wǎng)站上的 Kibana Download Page。
- 選擇適合你的操作系統(tǒng)的 Kibana 版本進(jìn)行下載。
- Kibana的版本需要和你下載的ElasticSearch版本一致。
3. 安裝 Kibana
1.在 Linux 上
-
解壓下載的文件:
使用命令行解壓下載的文件,例如:tar -xzf kibana-<version>-linux-x86_64.tar.gz
-
進(jìn)入 Kibana 目錄:
解壓后,進(jìn)入 Kibana 目錄。 -
配置 Kibana(可選):
編輯config/kibana.yml
文件,設(shè)置 Elasticsearch 的 URL。默認(rèn)情況下,它連接到http://localhost:9200
。 -
啟動(dòng) Kibana:
使用下列命令啟動(dòng) Kibana:./bin/kibana
2.在 Windows 上
-
解壓下載的 ZIP 文件。
-
運(yùn)行 Kibana:
打開(kāi)解壓后的文件夾,雙擊bin\kibana.bat
文件來(lái)啟動(dòng) Kibana。
3.在 macOS 上
- 可以使用 Homebrew 進(jìn)行安裝:
brew install kibana
- 啟動(dòng) Kibana:
kibana
4. 訪問(wèn) Kibana
- 在瀏覽器中訪問(wèn)
http://localhost:5601
。如果 Kibana 正在運(yùn)行,你將看到 Kibana 的主界面。
5. Kibana的漢化
截至我最后的更新(2023年4月),Kibana 支持多種語(yǔ)言,包括漢語(yǔ)。為了將 Kibana 界面轉(zhuǎn)換為中文,你需要在 Kibana 的配置文件中設(shè)置適當(dāng)?shù)恼Z(yǔ)言代碼。以下是將 Kibana 界面設(shè)置為中文的步驟:
1.定位配置文件
找到 Kibana 的配置文件 kibana.yml
。這個(gè)文件通常位于 Kibana 安裝目錄的 config
文件夾中。
2.2. 編輯配置文件
打開(kāi) kibana.yml
文件,并找到與國(guó)際化(i18n)相關(guān)的設(shè)置。
3. 設(shè)置語(yǔ)言
將 i18n.locale
設(shè)置為 zh-CN
來(lái)啟用簡(jiǎn)體中文界面。你可以通過(guò)添加或修改下面這行來(lái)實(shí)現(xiàn):
i18n.locale: "zh-CN"
如果這行代碼之前不存在,你需要新添加進(jìn)去;如果已經(jīng)存在但被注釋掉了(以 #
開(kāi)頭),則需要去掉 #
并確保值設(shè)置為 "zh-CN"
。
4. 重啟 Kibana
保存 kibana.yml
文件后,重啟 Kibana 以應(yīng)用更改。重啟的方法取決于你的安裝方式和操作系統(tǒng)。
5. 驗(yàn)證更改
重啟 Kibana 后,打開(kāi)瀏覽器并訪問(wèn) Kibana。此時(shí),界面應(yīng)該顯示為簡(jiǎn)體中文。
通過(guò)這些步驟,你應(yīng)該能夠?qū)?Kibana 的界面設(shè)置為中文,從而獲得更舒適的本地化用戶體驗(yàn)。
6. 注意事項(xiàng)
- 版本兼容性:確保你下載的 Kibana 版本與 Elasticsearch 版本兼容。
- 安全配置:考慮配置安全設(shè)置,如啟用 X-Pack 安全特性。
-
調(diào)整配置:你可能需要根據(jù)需要調(diào)整更多的配置設(shè)置,這些設(shè)置可以在
config/kibana.yml
文件中找到。
以上是基本的安裝步驟。對(duì)于具體操作系統(tǒng)或特定需求的更詳細(xì)安裝指南,請(qǐng)參考 Kibana 的官方文檔。
6.ElasticSearch核心概念
Elasticsearch 是一個(gè)高度可擴(kuò)展的開(kāi)源全文搜索和分析引擎,它允許你快速、近實(shí)時(shí)地存儲(chǔ)、搜索和分析大量數(shù)據(jù)。
為了更好地理解和使用 Elasticsearch,了解其核心概念非常重要。
下面讓我們更深入地探討 Elasticsearch 的核心概念,并在必要時(shí)與傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行對(duì)比,以便更好地理解其特點(diǎn)和用例。
1. 索引(Index)
- Elasticsearch:一個(gè)索引是文檔的集合。Elasticsearch 中的索引類(lèi)似于傳統(tǒng)數(shù)據(jù)庫(kù)中的“數(shù)據(jù)庫(kù)”,但在物理結(jié)構(gòu)上更為靈活。你可以將其視為一個(gè)優(yōu)化的文檔集合,用于快速的全文搜索和分析。
- 關(guān)系型數(shù)據(jù)庫(kù):數(shù)據(jù)庫(kù)中的“索引”是優(yōu)化特定查詢的數(shù)據(jù)結(jié)構(gòu)。而“數(shù)據(jù)庫(kù)”更類(lèi)似于 Elasticsearch 中的“索引”。
2. 文檔(Document)
- Elasticsearch:文檔是 Elasticsearch 中的基本信息單位,以 JSON 格式存儲(chǔ)。一個(gè)文檔類(lèi)似于關(guān)系型數(shù)據(jù)庫(kù)中的“行”,但其結(jié)構(gòu)不固定,可以包含復(fù)雜的嵌套結(jié)構(gòu)。
- 關(guān)系型數(shù)據(jù)庫(kù):表中的一行代表一條記錄,結(jié)構(gòu)由表定義的模式?jīng)Q定。
3. 字段(Field)
- Elasticsearch:文檔中的字段類(lèi)似于數(shù)據(jù)庫(kù)表中的列,但由于 Elasticsearch 的 schema-less 特性,文檔可以在同一索引中擁有不同的字段。
- 關(guān)系型數(shù)據(jù)庫(kù):字段(列)是表中的基本數(shù)據(jù)單元,每個(gè)表的每行都有相同的字段。
4. 映射(Mapping)
- Elasticsearch:映射定義了文檔中字段的數(shù)據(jù)類(lèi)型和其他屬性,類(lèi)似于關(guān)系型數(shù)據(jù)庫(kù)中的表結(jié)構(gòu)定義。盡管 Elasticsearch 是 schema-less 的,但映射允許你定義如何處理文檔中的不同字段。
- 關(guān)系型數(shù)據(jù)庫(kù):表結(jié)構(gòu)定義是創(chuàng)建表時(shí)必須指定的,確定了字段名和數(shù)據(jù)類(lèi)型。
5. 分片(Shard)
- Elasticsearch:分片是 Elasticsearch 中數(shù)據(jù)分布的基本單元。每個(gè)索引都可以分成多個(gè)分片,每個(gè)分片是一個(gè)獨(dú)立的搜索引擎。這使得 Elasticsearch 可以水平擴(kuò)展,分布在多個(gè)服務(wù)器上。
- 關(guān)系型數(shù)據(jù)庫(kù):傳統(tǒng)數(shù)據(jù)庫(kù)通常不直接支持水平分片,需要額外的技術(shù)和復(fù)雜的管理。
6. 副本(Replica)
- Elasticsearch:副本是分片的一個(gè)或多個(gè)完整的副本。副本提供數(shù)據(jù)冗余,提高系統(tǒng)的容錯(cuò)能力和查詢的響應(yīng)速度。
- 關(guān)系型數(shù)據(jù)庫(kù):副本通常是整個(gè)數(shù)據(jù)庫(kù)的復(fù)制,用于提供容災(zāi)恢復(fù)和讀取負(fù)載均衡。
7. 節(jié)點(diǎn)和集群(Node & Cluster)
- Elasticsearch:節(jié)點(diǎn)是安裝了 Elasticsearch 的單個(gè)服務(wù)器。多個(gè)節(jié)點(diǎn)可以形成一個(gè)集群,集群通過(guò)分布式架構(gòu)協(xié)同工作,提供數(shù)據(jù)冗余、負(fù)載均衡和故障轉(zhuǎn)移。
- 關(guān)系型數(shù)據(jù)庫(kù):雖然也可以通過(guò)主從復(fù)制或集群配置實(shí)現(xiàn)高可用性,但傳統(tǒng)數(shù)據(jù)庫(kù)通常不具備 Elasticsearch 這樣的原生分布式特性。
8. 查詢 DSL
- Elasticsearch:使用強(qiáng)大的查詢 DSL 進(jìn)行數(shù)據(jù)搜索,支持全文搜索、復(fù)雜查詢構(gòu)建等。
- 關(guān)系型數(shù)據(jù)庫(kù):使用 SQL 語(yǔ)言進(jìn)行數(shù)據(jù)查詢,強(qiáng)調(diào)數(shù)據(jù)的結(jié)構(gòu)和關(guān)系。
9. 總結(jié)
Elasticsearch 與傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)在數(shù)據(jù)存儲(chǔ)、查詢、結(jié)構(gòu)、以及處理方式上有顯著差異。Elasticsearch 以其高效的全文搜索能力、靈活的數(shù)據(jù)模型、強(qiáng)大的水平擴(kuò)展能力和容錯(cuò)能力而著
理解這些核心概念對(duì)于有效地使用 Elasticsearch 是非常重要的,它們構(gòu)成了 Elasticsearch 功能強(qiáng)大、靈活性高的基礎(chǔ)。
7.倒排索引
倒排索引(Inverted Index)是 Elasticsearch 和其他全文搜索引擎的核心概念之一,這種索引類(lèi)型對(duì)于提高搜索效率至關(guān)重要。為了理解倒排索引,我們可以將其與傳統(tǒng)的正向索引進(jìn)行對(duì)比。
1. 正向索引(Forward Index)
在傳統(tǒng)數(shù)據(jù)庫(kù)或簡(jiǎn)單的搜索系統(tǒng)中,可能會(huì)使用所謂的正向索引。在正向索引中,數(shù)據(jù)結(jié)構(gòu)通常是這樣的:
- 文檔ID -> 文檔內(nèi)容
例如,如果我們有兩個(gè)文檔:
- 文檔 1: “The quick brown fox”
- 文檔 2: “The brown fox jumps”
正向索引將會(huì)記錄每個(gè)文檔ID及其對(duì)應(yīng)的內(nèi)容。
2. 倒排索引(Inverted Index)
倒排索引顛倒了這種映射關(guān)系,記錄的是每個(gè)詞及其出現(xiàn)的文檔:
- 詞 -> 文檔ID列表
以同樣的例子,倒排索引會(huì)是這樣的:
- “The”: [文檔 1, 文檔 2]
- “quick”: [文檔 1]
- “brown”: [文檔 1, 文檔 2]
- “fox”: [文檔 1, 文檔 2]
- “jumps”: [文檔 2]
3. 倒排索引的工作原理
-
分詞(Tokenization):將文檔的內(nèi)容分解為一系列的詞(或稱為“tokens”)。在分詞過(guò)程中,還可能包括轉(zhuǎn)換為小寫(xiě)、去除停用詞(如“的”,“和”等常見(jiàn)但對(duì)搜索意義不大的詞)等步驟。
-
創(chuàng)建詞典(Dictionary):所有文檔的詞匯構(gòu)成了一個(gè)詞典。詞典中的每個(gè)詞都指向一個(gè)倒排列表。
-
建立倒排列表(Posting List):對(duì)于詞典中的每個(gè)詞,都有一個(gè)倒排列表,記錄了該詞出現(xiàn)在哪些文檔中。
4. 倒排索引的優(yōu)勢(shì)
- 高效搜索:當(dāng)執(zhí)行搜索查詢時(shí),搜索引擎只需查找包含搜索詞的倒排列表,然后提取相關(guān)的文檔。這比逐個(gè)檢查每個(gè)文檔要快得多。
- 空間效率:雖然建立索引需要額外空間,但倒排索引通常比正向索引更加節(jié)省空間,尤其是對(duì)于包含大量文檔的大型數(shù)據(jù)庫(kù)。
在 Elasticsearch 中,倒排索引使得它能夠快速處理復(fù)雜的全文搜索查詢。每個(gè)索引在 Elasticsearch 中由一個(gè)或多個(gè)分片管理,每個(gè)分片擁有自己的一套倒排索引。
倒排索引是全文搜索技術(shù)的核心, Elasticsearch 這樣的系統(tǒng)能夠在大規(guī)模文檔集合中快速、高效地執(zhí)行搜索查詢。倒排索引的設(shè)計(jì)允許快速?gòu)拇罅繑?shù)據(jù)中找到包含特定詞的所有文檔,是實(shí)現(xiàn)近實(shí)時(shí)搜索的關(guān)鍵。
8.IK分詞器
IK分詞器是一個(gè)開(kāi)源的,基于 Java 語(yǔ)言開(kāi)發(fā)的中文分詞工具,廣泛用于Elasticsearch中。它為中文文本提供了有效的分詞處理,尤其在搜索引擎中表現(xiàn)出色。IK分詞器特別適用于與Elasticsearch結(jié)合使用,因?yàn)樗軌蛱岣咧形乃阉鞯臏?zhǔn)確性和效率。
1. IK分詞器的核心特點(diǎn)
-
兩種分詞模式:
- 精確模式(Smart Mode):嘗試將句子最精確地切開(kāi),適合精確搜索。
- 全切分模式(Full Mode):把文本切分成盡可能多的詞,適合用于提取關(guān)鍵詞。
-
自定義詞典支持:
- 支持用戶自定義詞典,以適應(yīng)特定領(lǐng)域的分詞需求。
- 通過(guò)添加自定義詞匯,可以提高分詞的準(zhǔn)確性和覆蓋范圍。
-
同義詞處理:
- 可以處理一定程度的同義詞,使搜索更加靈活。
-
中文停用詞處理:
- 能夠有效地去除常見(jiàn)的中文停用詞,提高搜索的相關(guān)性。
2. IK分詞器的使用
要在Elasticsearch中使用IK分詞器,需要進(jìn)行以下步驟:
-
安裝IK插件:
- 下載與你的Elasticsearch版本相對(duì)應(yīng)的IK分詞器插件。
- 將插件安裝到Elasticsearch的插件(plugins)目錄中。
-
配置IK分詞器:
- 在創(chuàng)建索引時(shí),可以指定使用IK分詞器對(duì)文本字段進(jìn)行分詞。
- 可以配置為使用精確模式或全切分模式。
-
自定義詞典設(shè)置(可選):
- 你可以根據(jù)需要添加自定義詞典,以覆蓋或擴(kuò)展默認(rèn)詞庫(kù)。
IK分詞器在處理中文文本時(shí)非常有效,尤其適合用于中文全文搜索、文本分析等領(lǐng)域。例如,它可以用于新聞網(wǎng)站、電商平臺(tái)、社交媒體分析等需要精準(zhǔn)搜索和文本分析的應(yīng)用。
IK分詞器通過(guò)提供精確和全面的中文分詞功能,顯著提升了Elasticsearch在處理中文數(shù)據(jù)時(shí)的性能和準(zhǔn)確性。這使得它成為處理中文文本的搜索和分析應(yīng)用中的一個(gè)重要工具。
3. Kibana測(cè)試
ik_smart
和 ik_max_word
是 Elasticsearch 中 IK 分詞器提供的兩種不同的分詞模式,各自適用于不同的場(chǎng)景:
-
ik_smart(智能分詞模式)
- 特點(diǎn):在這種模式下,分詞器會(huì)嘗試將句子切分成最少的詞匯,同時(shí)保持各個(gè)詞匯的獨(dú)立性和完整性。它更傾向于提取長(zhǎng)詞。
- 應(yīng)用場(chǎng)景:適用于需要較高精度的場(chǎng)景,比如精確搜索,其中用戶期望的結(jié)果是嚴(yán)格匹配他們查詢的詞匯。智能分詞有助于減少誤命中的可能性,提供更加準(zhǔn)確的搜索結(jié)果。
-
ik_max_word(最大切分模式)
- 特點(diǎn):這種模式會(huì)將文本盡可能多地切分成更細(xì)小的詞匯。它會(huì)產(chǎn)生更多的詞匯,包括短語(yǔ)中的所有可能的單詞組合。
-
應(yīng)用場(chǎng)景:適用于需要更廣泛搜索范圍的場(chǎng)景,如關(guān)鍵詞提取、文本分析或當(dāng)你想要在文本中查找盡可能多的相關(guān)信息時(shí)。最大切分模式有利于增加文檔的可檢索性,但也可能導(dǎo)致更多的誤匹配。
對(duì)比:
- ik_smart 更注重于提取有意義的長(zhǎng)詞,使得搜索結(jié)果更加精準(zhǔn),但可能會(huì)遺漏一些細(xì)粒度的關(guān)鍵詞。
- ik_max_word 提供了更細(xì)粒度的分詞,能夠捕捉到更多的關(guān)鍵詞,但可能會(huì)導(dǎo)致搜索結(jié)果中包含一些不太相關(guān)的信息。
選擇哪種模式取決于具體的應(yīng)用場(chǎng)景和搜索需求。在某些情況下,可能需要在兩種模式之間進(jìn)行權(quán)衡,以找到最適合特定用例的平衡點(diǎn)。
3. 自定義詞典
配置和擴(kuò)展自定義詞典是 IK 分詞器的一個(gè)重要特性,特別是在處理專(zhuān)業(yè)術(shù)語(yǔ)或特定領(lǐng)域詞匯時(shí)。以下是在 Elasticsearch 中配置和擴(kuò)展 IK 分詞器自定義詞典的步驟:
1. 準(zhǔn)備自定義詞典文件
自定義詞典通常是文本文件,其中包含了你希望分詞器識(shí)別的詞匯。每個(gè)詞匯占一行。
例如,你的自定義詞典文件 my_dict.txt
可能看起來(lái)像這樣:
專(zhuān)業(yè)術(shù)語(yǔ)1
專(zhuān)業(yè)術(shù)語(yǔ)2
特定詞匯
2. 配置 IK 分詞器以使用自定義詞典
IK 分詞器的配置通常在 Elasticsearch 的配置文件夾中的 config
目錄下。具體步驟如下:
-
將自定義詞典文件放入適當(dāng)?shù)奈恢?/strong>:你可以將自定義詞典文件放在 Elasticsearch 的
config
目錄下,例如config/ik/my_dict.txt
。 -
修改 IK 分詞器的配置文件:IK 分詞器的配置文件通常名為
IKAnalyzer.cfg.xml
,位于config/ik
目錄下。你需要在這個(gè)文件中指定你的自定義詞典文件路徑。例如,添加以下內(nèi)容:
<properties> <comment>IK Analyzer 擴(kuò)展配置</comment> <!-- 用戶可以在這里配置自己的擴(kuò)展字典 --> <entry key="ext_dict">my_dict.txt</entry> <!-- 用戶可以在這里配置自己的擴(kuò)展停止詞字典 --> <entry key="ext_stopwords">my_stopwords.txt</entry> </properties>
3. 重啟 Elasticsearch
配置更改后,需要重啟 Elasticsearch 以使更改生效。
4. 測(cè)試自定義詞典
重啟 Elasticsearch 后,你可以通過(guò) _analyze
API 測(cè)試自定義詞典的效果。例如:
GET /_analyze
{
"analyzer": "ik_smart",
"text": "這里是你的測(cè)試文本"
}
這應(yīng)該會(huì)根據(jù)你的自定義詞典來(lái)分詞。
5. 注意事項(xiàng)
- 格式和編碼:確保自定義詞典文件的格式正確(每行一個(gè)詞匯),并且保存為 UTF-8 編碼。
- 詞典維護(hù):隨著時(shí)間的推移和應(yīng)用的發(fā)展,可能需要定期更新和維護(hù)自定義詞典。
- 性能考慮:雖然自定義詞典是一個(gè)強(qiáng)大的功能,但過(guò)大的詞典可能會(huì)影響分詞性能。
通過(guò)這些步驟,你可以有效地?cái)U(kuò)展 IK 分詞器的功能,使其更適合你的應(yīng)用場(chǎng)景。
9.CRUD命令
在 Elasticsearch 中,執(zhí)行增刪改查(CRUD)操作通常是通過(guò) RESTful API 來(lái)完成的。這些操作遵循 HTTP 方法的標(biāo)準(zhǔn)實(shí)踐,使其易于理解和使用。下面是 Elasticsearch 中常見(jiàn)的 CRUD 操作和相應(yīng)的 RESTful 命令。
1. 創(chuàng)建(Create)
-
索引一個(gè)文檔:使用
PUT
或POST
方法向指定索引添加一個(gè)文檔。PUT /<index>/_doc/<id> { "field1": "value1", "field2": "value2" }
或
POST /<index>/_doc/ { "field1": "value1", "field2": "value2" }
在這里,
<index>
是索引名,<id>
是文檔的唯一標(biāo)識(shí)符。如果不指定<id>
,Elasticsearch 會(huì)自動(dòng)生成一個(gè)。
2. 讀?。≧ead)
-
獲取文檔:使用
GET
方法根據(jù)文檔 ID 讀取單個(gè)文檔。GET /<index>/_doc/<id>
-
搜索文檔:使用
GET
或POST
方法在索引中搜索文檔。GET /<index>/_search { "query": { "match": { "field": "value" } } }
3. 更新(Update)
-
更新文檔:使用
POST
方法更新現(xiàn)有文檔的部分內(nèi)容,這里只更新指定的字段。POST /<index>/_update/<id> { "doc": { "fieldToUpdate": "newValue" } }
而PUT更新方式執(zhí)行更新,如果在對(duì)應(yīng)的字段不傳遞值的會(huì)被自動(dòng)賦值為空,因此一般不建議使用PUT命令執(zhí)行更新!
4. 刪除(Delete)
-
刪除文檔:使用
DELETE
方法根據(jù)文檔 ID 刪除一個(gè)文檔。DELETE /<index>/_doc/<id>
-
刪除索引:使用
DELETE
方法刪除整個(gè)索引。DELETE /<index>
-
這些操作是基本的 Elasticsearch RESTful API 示例。實(shí)際使用中,可能需要根據(jù)具體情況對(duì)請(qǐng)求進(jìn)行調(diào)整。
-
對(duì)于復(fù)雜的搜索請(qǐng)求,Elasticsearch 提供了豐富的查詢 DSL,可以在
_search
請(qǐng)求中使用。 -
安全性考慮:在對(duì)外暴露 Elasticsearch 服務(wù)時(shí),應(yīng)確保適當(dāng)?shù)陌踩胧缡褂蒙矸蒡?yàn)證、授權(quán)等。
Elasticsearch 的 RESTful API 提供了強(qiáng)大的靈活性,使其成為處理各種數(shù)據(jù)和搜索需求的理想選擇。通過(guò)上述的 CRUD 操作,你可以在 Elasticsearch 中高效地管理數(shù)據(jù)。
10.花式查詢命令
Elasticsearch 提供了多種強(qiáng)大的查詢命令,允許進(jìn)行復(fù)雜和靈活的數(shù)據(jù)檢索。以下是一些常見(jiàn)的 Elasticsearch 查詢類(lèi)型和相應(yīng)的查詢命令示例:
1. 基本查詢
-
全文搜索(Match Query):搜索文本字段中匹配特定詞匯的文檔。
GET /<index>/_search { "query": { "match": { "field": "text" } } }
2. 組合查詢
-
布爾查詢(Bool Query):組合多個(gè)查詢條件,支持
must
(必須)、should
(應(yīng)該)、must_not
(不應(yīng)該)和filter
(過(guò)濾)。GET /<index>/_search { "query": { "bool": { "must": [ { "match": { "field1": "value1" }}, { "match": { "field2": "value2" }} ], "filter": [ { "term": { "field3": "value3" }} ] } } }
在 Elasticsearch 中,布爾查詢(Bool Query)是一種復(fù)雜查詢類(lèi)型,它允許你結(jié)合多個(gè)查詢條件,例如“必須”(must)、“應(yīng)該”(should)、“不應(yīng)該”(must_not)和“過(guò)濾”(filter)。這種查詢非常強(qiáng)大,因?yàn)樗峁┝嗽趩蝹€(gè)查詢中組合多種條件的能力。
布爾查詢的組成部分
-
Must:所有在
must
部分的條件必須滿足,類(lèi)似于邏輯 AND。 -
Should:在
should
部分的條件中至少有一個(gè)應(yīng)該滿足,但不是必須的。如果沒(méi)有must
條件,那么至少要滿足一個(gè)should
條件。 -
Must_not:在
must_not
部分的條件都不應(yīng)該滿足,類(lèi)似于邏輯 NOT。 -
Filter:
filter
部分的條件必須滿足,但與must
不同,它不影響評(píng)分(用于過(guò)濾而不是評(píng)分)。
布爾查詢示例
以下是一個(gè)布爾查詢的示例,該查詢結(jié)合了多個(gè)條件:
GET /<index>/_search
{
"query": {
"bool": {
"must": [
{ "match": { "field1": "value1" } }
],
"should": [
{ "match": { "field2": "value2" } },
{ "match": { "field3": "value3" } }
],
"must_not": [
{ "match": { "field4": "value4" } }
],
"filter": [
{ "term": { "field5": "value5" } }
]
}
}
}
在這個(gè)示例中:
-
must
部分要求 “field1” 必須匹配 “value1”。 -
should
部分表示 “field2” 應(yīng)該匹配 “value2” 或者 “field3” 應(yīng)該匹配 “value3”(或者兩者都匹配),但這些條件不是必須的。 -
must_not
部分指定 “field4” 不應(yīng)該匹配 “value4”。 -
filter
部分要求 “field5” 必須精確匹配 “value5”。
使用布爾查詢的場(chǎng)景
布爾查詢?cè)谛枰獔?zhí)行復(fù)雜搜索時(shí)非常有用,例如:
- 當(dāng)你需要同時(shí)滿足多個(gè)條件。
- 當(dāng)你想要排除某些文檔。
- 當(dāng)你有一些首選條件,但它們不是必需的。
布爾查詢因其靈活性和強(qiáng)大的組合能力,在 Elasticsearch 查詢中占有重要地位。通過(guò)適當(dāng)?shù)亟M合這些不同的子句,你可以構(gòu)建出涵蓋幾乎所有搜尋需求的復(fù)雜查詢。
3. 范圍查詢
-
范圍查詢(Range Query):在數(shù)字或日期字段上搜索特定范圍內(nèi)的值。
GET /<index>/_search { "query": { "range": { "date_field": { "gte": "2021-01-01", "lte": "2021-12-31" } } } }
4. 術(shù)語(yǔ)查詢
-
術(shù)語(yǔ)查詢(Term Query):搜索文本字段中包含特定術(shù)語(yǔ)的文檔。
GET /<index>/_search { "query": { "term": { "field": "value" } } }
5. 聚合查詢
-
聚合查詢(Aggregations):對(duì)搜索結(jié)果執(zhí)行統(tǒng)計(jì)分析。
GET /<index>/_search { "size": 0, "aggs": { "agg_name": { "terms": { "field": "field_to_aggregate" } } } }
聚合查詢?cè)?Elasticsearch 中是一個(gè)非常強(qiáng)大的功能,它允許你對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,類(lèi)似于 SQL 中的 GROUP BY
功能。聚合可以是簡(jiǎn)單的計(jì)數(shù),也可以是更復(fù)雜的操作,如求平均值、求和、最大值、最小值等。
聚合查詢的主要類(lèi)型
-
桶(Bucket)聚合:這類(lèi)聚合創(chuàng)建了一個(gè)包含文檔組的桶,每個(gè)桶都是滿足特定條件的文檔集合。常見(jiàn)的桶聚合有:
- 術(shù)語(yǔ)聚合(Terms Aggregation):基于字段值的唯一項(xiàng)進(jìn)行分組。
- 范圍聚合(Range Aggregation):基于數(shù)值范圍進(jìn)行分組。
- 日期范圍聚合(Date Range Aggregation):基于日期范圍進(jìn)行分組。
-
指標(biāo)(Metric)聚合:對(duì)文檔集進(jìn)行一些統(tǒng)計(jì)計(jì)算。常見(jiàn)的指標(biāo)聚合包括:
- 平均值(Average Aggregation)
- 最大值(Max Aggregation)
- 最小值(Min Aggregation)
- 求和(Sum Aggregation)
- 計(jì)數(shù)(Value Count Aggregation)
示例:聚合查詢
假設(shè)你有一個(gè)包含銷(xiāo)售數(shù)據(jù)的索引 sales
,你想要計(jì)算每個(gè)產(chǎn)品的平均銷(xiāo)售額。
GET /sales/_search
{
"size": 0, // 不返回文檔數(shù)據(jù),只返回聚合結(jié)果
"aggs": {
"average_sales": { // 聚合的名字
"terms": { // 術(shù)語(yǔ)聚合,按產(chǎn)品分組
"field": "product"
},
"aggs": {
"average_price": { // 每個(gè)產(chǎn)品的平均銷(xiāo)售額
"avg": {
"field": "price"
}
}
}
}
}
}
這個(gè)查詢的解釋?zhuān)?/p>
-
"size": 0
表示不返回搜索結(jié)果中的文檔,只返回聚合數(shù)據(jù)。 -
aggs
是定義聚合的地方。 -
"terms": { "field": "product" }
表示根據(jù)product
字段的值進(jìn)行分組。 - 在每個(gè)產(chǎn)品分組內(nèi)部,我們又定義了一個(gè)名為
average_price
的子聚合,用于計(jì)算該組中所有銷(xiāo)售記錄的平均價(jià)格。
注意事項(xiàng)
- 聚合操作可能在大數(shù)據(jù)集上非常耗資源,特別是在執(zhí)行復(fù)雜的聚合時(shí)。因此,應(yīng)當(dāng)關(guān)注其對(duì)性能的影響。
- 對(duì)于高基數(shù)字段(即字段有許多唯一值)的術(shù)語(yǔ)聚合,可能需要考慮對(duì)內(nèi)存的影響,因?yàn)?Elasticsearch 需要在內(nèi)存中為每個(gè)唯一值保留一個(gè)桶。
- 對(duì)于大型數(shù)據(jù)集,考慮使用
composite
聚合來(lái)分頁(yè)聚合結(jié)果。
聚合查詢是 Elasticsearch 中極其強(qiáng)大的功能之一,它可以幫助你從數(shù)據(jù)中提取有意義的模式和統(tǒng)計(jì)信息。
6. 模糊查詢
-
模糊查詢(Fuzzy Query):搜索拼寫(xiě)相似的詞匯。
GET /<index>/_search { "query": { "fuzzy": { "field": { "value": "text", "fuzziness": 2 } } } }
在 Elasticsearch 中,模糊查詢(Fuzzy Query)允許你在查詢時(shí)對(duì)某些不確定性或拼寫(xiě)錯(cuò)誤進(jìn)行容錯(cuò)處理。這種查詢對(duì)于處理用戶的輸入錯(cuò)誤或提供更寬松的搜索體驗(yàn)特別有用。
模糊查詢的工作原理
模糊查詢通過(guò)計(jì)算字詞的 Levenshtein 編輯距離來(lái)工作。編輯距離是將一個(gè)字詞轉(zhuǎn)換成另一個(gè)字詞所需的單個(gè)字符更改(插入、刪除或替換)的次數(shù)。在 Elasticsearch 中,你可以指定所允許的最大編輯距離。
示例:模糊查詢
假設(shè)你有一個(gè)字段 field
,想要搜索接近于 “elastc” 的詞匯,可以使用以下查詢:
GET /<index>/_search
{
"query": {
"fuzzy": {
"field": {
"value": "elastc",
"fuzziness": 2
}
}
}
}
在這個(gè)查詢中:
-
"fuzzy"
指定了模糊查詢。 -
"field"
是你要搜索的字段。 -
"value": "elastc"
指定了你想要搜索的近似詞匯。 -
"fuzziness": 2
表示允許的最大編輯距離為 2。這意味著 Elasticsearch 會(huì)尋找那些最多需要兩次單字符更改就能從 “elastc” 變成的詞匯。
使用模糊查詢的場(chǎng)景
- 處理拼寫(xiě)錯(cuò)誤:當(dāng)用戶輸入可能包含拼寫(xiě)錯(cuò)誤時(shí),模糊查詢可以提供更彈性的搜索結(jié)果。
- 近似搜索:在某些情況下,你可能不確定確切的詞匯或者想要包括拼寫(xiě)的變體。
模糊查詢是 Elasticsearch 中一個(gè)非常實(shí)用的功能,尤其在處理用戶輸入或開(kāi)發(fā)需要容錯(cuò)能力的搜索應(yīng)用時(shí)非常有價(jià)值。
7. 前綴和通配符查詢
-
前綴查詢(Prefix Query):搜索以特定前綴開(kāi)頭的詞匯。
GET /<index>/_search { "query": { "prefix": { "field": "pre" } } }
-
通配符查詢(Wildcard Query):使用通配符(
*
和?
)進(jìn)行模式匹配搜索。GET /<index>/_search { "query": { "wildcard": { "field": "pat*ern" } } }
8. 分頁(yè)與排序
此外,在 Elasticsearch 中進(jìn)行分頁(yè)查詢和排序是常見(jiàn)的需求,特別是當(dāng)處理大量數(shù)據(jù)時(shí)。
下面是結(jié)合分頁(yè)和排序的 Elasticsearch 查詢示例,以及對(duì)這些命令的詳細(xì)說(shuō)明:
假設(shè)你想對(duì)一個(gè)名為 “example_index” 的索引進(jìn)行查詢,獲取第2頁(yè)的數(shù)據(jù)(每頁(yè)10條),并根據(jù) “date_field” 字段進(jìn)行降序排序:
GET /example_index/_search
{
"query": {
"match_all": {}
},
"sort": [
{ "date_field": { "order": "desc" }}
],
"from": 10,
"size": 10
}
-
GET /example_index/_search
:這是向 Elasticsearch 發(fā)送的 HTTP GET 請(qǐng)求,用于搜索名為 “example_index” 的索引。 -
query
:這部分定義了你想要執(zhí)行的搜索查詢。-
match_all
:這里使用了一個(gè)匹配所有文檔的查詢,作為一個(gè)示例。
-
-
sort
:這部分用于定義結(jié)果的排序方式。-
{ "date_field": { "order": "desc" }}
:這表示根據(jù) “date_field” 字段的值對(duì)結(jié)果進(jìn)行降序排序。
-
-
from
和size
:這兩個(gè)參數(shù)用于控制分頁(yè)。-
from
: 定義了返回結(jié)果的起始位置。在這個(gè)例子中,from: 10
表示從第11個(gè)文檔開(kāi)始返回(因?yàn)橛?jì)數(shù)從0開(kāi)始)。 -
size
: 定義了返回的文檔數(shù)量。在這個(gè)例子中,size: 10
表示返回10個(gè)文檔。
-
分頁(yè)和排序的應(yīng)用
-
分頁(yè):在處理大量數(shù)據(jù)時(shí),分頁(yè)是一種常見(jiàn)的方法,用于減少單次請(qǐng)求加載的數(shù)據(jù)量,從而提高響應(yīng)速度和用戶體驗(yàn)。
-
排序:排序?qū)τ谔峁┯幸饬x和相關(guān)的搜索結(jié)果非常重要,特別是在數(shù)據(jù)分析和報(bào)告應(yīng)用中。
-
分頁(yè)的
from
和size
參數(shù)需要根據(jù)實(shí)際需求調(diào)整。請(qǐng)注意,非常大的from
值可能會(huì)影響性能。 -
在使用排序時(shí),確保字段已經(jīng)被正確索引并適用于排序。例如,對(duì)于文本字段,通常需要一個(gè)未分析的(
keyword
類(lèi)型的)版本來(lái)進(jìn)行排序。 -
排序和分頁(yè)結(jié)合使用時(shí),應(yīng)特別注意性能和資源使用情況,尤其是在大規(guī)模數(shù)據(jù)集上。
9. 高亮查詢
在 Elasticsearch 中,高亮查詢是一種顯示特性,用于在搜索結(jié)果中突出顯示匹配的文本片段。這在全文搜索中非常有用,因?yàn)樗梢詭椭脩艨焖俣ㄎ粸槭裁茨硞€(gè)文檔與他們的查詢匹配。高亮顯示通常用于提高搜索結(jié)果的可讀性和相關(guān)性。
1. 基本用法
要在 Elasticsearch 查詢中使用高亮顯示,你需要在查詢請(qǐng)求體中添加一個(gè) highlight
字段。以下是一個(gè)基本的示例:
GET /<index>/_search
{
"query": {
"match": {
"content": "elasticsearch"
}
},
"highlight": {
"fields": {
"content": {}
}
}
}
在這個(gè)查詢中:
-
match
查詢用于在content
字段中查找包含 “elasticsearch” 的文檔。 -
highlight
部分指定了高亮顯示設(shè)置。 -
fields
下的"content": {}
表示content
字段中匹配的部分將被高亮顯示。
2. 自定義高亮顯示
Elasticsearch 還提供了一些高亮顯示的定制選項(xiàng),包括:
-
設(shè)置前后標(biāo)簽:可以自定義高亮片段的前后標(biāo)簽(默認(rèn)為
<em>
標(biāo)簽)。"highlight": { "fields": { "content": { "pre_tags": ["<highlight>"], "post_tags": ["</highlight>"] } } }
-
限制片段數(shù)和長(zhǎng)度:可以限制返回的高亮片段的數(shù)量和長(zhǎng)度。
"highlight": { "fields": { "content": { "number_of_fragments": 3, "fragment_size": 150 } } }
-
字段類(lèi)型:不是所有字段類(lèi)型都支持高亮。通常,只有文本(
text
)字段才支持高亮顯示。 -
性能考慮:高亮查詢可能會(huì)增加查詢的處理時(shí)間,尤其是在大型文檔或大量文檔的情況下。
-
前后標(biāo)簽:確保自定義的前后標(biāo)簽與你的應(yīng)用程序中的樣式兼容。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-785693.html
通過(guò)使用高亮顯示,你可以改善搜索體驗(yàn),使用戶更容易理解為何某個(gè)文檔與其搜索查詢相匹配。這在用戶界面和用戶體驗(yàn)方面非常重要。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-785693.html
"query": {
"match": {
"content": "elasticsearch"
}
},
"highlight": {
"fields": {
"content": {}
}
}
}
在這個(gè)查詢中:
-
match
查詢用于在content
字段中查找包含 “elasticsearch” 的文檔。 -
highlight
部分指定了高亮顯示設(shè)置。 -
fields
下的"content": {}
表示content
字段中匹配的部分將被高亮顯示。
2. 自定義高亮顯示
Elasticsearch 還提供了一些高亮顯示的定制選項(xiàng),包括:
-
設(shè)置前后標(biāo)簽:可以自定義高亮片段的前后標(biāo)簽(默認(rèn)為
<em>
標(biāo)簽)。"highlight": { "fields": { "content": { "pre_tags": ["<highlight>"], "post_tags": ["</highlight>"] } } }
-
限制片段數(shù)和長(zhǎng)度:可以限制返回的高亮片段的數(shù)量和長(zhǎng)度。
"highlight": { "fields": { "content": { "number_of_fragments": 3, "fragment_size": 150 } } }
-
字段類(lèi)型:不是所有字段類(lèi)型都支持高亮。通常,只有文本(
text
)字段才支持高亮顯示。 -
性能考慮:高亮查詢可能會(huì)增加查詢的處理時(shí)間,尤其是在大型文檔或大量文檔的情況下。
-
前后標(biāo)簽:確保自定義的前后標(biāo)簽與你的應(yīng)用程序中的樣式兼容。
通過(guò)使用高亮顯示,你可以改善搜索體驗(yàn),使用戶更容易理解為何某個(gè)文檔與其搜索查詢相匹配。這在用戶界面和用戶體驗(yàn)方面非常重要。
到了這里,關(guān)于Elasticsearch 精粹:一站式學(xué)習(xí)全方位搜索技術(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!