Elastic Search:構建語義搜索體驗

當你逐步熟悉 Elastic 時,你將使用 Elasticsearch Relevance Engine? (ESRE),該引擎旨在為 AI 搜索應用程序提供支持。 借助 ESRE,你可以利用一套開發人員工具,包括 Elastic 的文本搜索、向量數據庫和我們用于語義搜索的專有轉換器模型。

Elastic 提供了多種搜索技術,從文本搜索的行業標準 BM25 開始。 它為特定搜索提供精確匹配,匹配精確的關鍵字,并通過調整進行改進。

當你開始向量搜索時,請記住向量搜索有兩種形式:“密集(dense)”(又名 kNN 向量搜索)和 “稀疏(sparse)”,例如 Elastic 的學習稀疏編碼器 (ELSER)。

Elastic 還為語義搜索提供了開箱即用的 Learned Sparse Encoder 模型。 該模型在各種數據集上都表現出色,例如財務數據、天氣記錄、問答對等。 該模型的構建是為了提供跨領域的巨大相關性,而不需要額外的微調。

查看此交互式演示,了解當您根據 Elastic 的文本 BM25 算法測試 Elastic 的學習稀疏編碼器模型時,搜索結果如何變得更相關。

此外,Elastic還支持密集向量,對文本以外的非結構化數據(例如視頻、圖像、音頻)實現相似性搜索。

語義搜索和向量搜索的優點在于,這些技術允許客戶在搜索查詢中使用直觀的語言。 例如,如果向想搜索有關第二收入的工作場所指南,你可以搜索 “副業”,這不是你在正式人力資源文件中可能看到的術語。

在本指南中,我們將演示如何創建 Elasticsearch 集群、使用 Elastic Web 爬網程序提取數據以及只需單擊幾下即可實現語義搜索。

安裝

Elasticsearch?

我們可參考我之前的文章 “如何在 Linux,MacOS 及 Windows 上進行安裝 Elasticsearch” 來安裝 Elasticsearch。特別地,我們需要按照 Elastic Stack 8.x 的安裝指南來進行安裝。

在 Elasticsearch 終端輸出中,找到 elastic 用戶的密碼和 Kibana 的注冊令牌。 這些是在 Elasticsearch 第一次啟動時打印的。

我們記下這個密碼,并在下面的配置中進行使用。同時它也會生成相應的證書文件:

$ pwd
/Users/liuxg/elastic/elasticsearch-8.12.0
$ cd config/certs/
$ ls
http.p12      http_ca.crt   transport.p12

安裝 Kibana

我們接下來安裝 Kibana。我們可以參考我之前的文章 “如何在 Linux,MacOS 及 Windows 上安裝 Elastic 棧中的 Kibana” 來進行我們的安裝。特別地,我們需要安裝 Kibana 8.2 版本。如果你還不清楚如何安裝 Kibana 8.2,那么請閱讀我之前的文章 “Elastic Stack 8.0 安裝 - 保護你的 Elastic Stack 現在比以往任何時候都簡單”。在啟動 Kibana 之前,我們可以修改 Kibana 的配置文件如下。添加如下的句子到 config/kibana.yml 中去:

config/kibana.yml

enterpriseSearch.host: http://localhost:3002

然后,我們使用如下的命令來啟動 Kibana:

我們在瀏覽器中輸入上面輸出的地址然后輸入相應的 enrollment token 就可以把 Kibana 啟動起來。

Java安裝

你需要安裝 Java。版本在?Java 8?或者?Java 11。我們可以參考鏈接來查找需要的 Java 版本。

App search 安裝

我們在地址 Download Elastic Enterprise Search | Elastic 找到我們需要的版本進行下載。并按照頁面上相應的指令來進行按照。如果你想針對你以前的版本進行安裝的話,請參閱地址 https://www.elastic.co/downloads/past-releases#app-search。

等我們下載完 Enterprise Search 的安裝包,我們可以使用如下的命令來進行解壓縮:

$ pwd
/Users/liuxg/elastic
$ ls
elasticsearch-8.12.0                       kibana-8.12.0
elasticsearch-8.12.0-darwin-aarch64.tar.gz kibana-8.12.0-darwin-aarch64.tar.gz
enterprise-search-8.12.1.tar.gz            logstash-8.12.0-darwin-aarch64.tar.gz
filebeat-8.12.0-darwin-aarch64.tar.gz      metricbeat-8.12.0-darwin-aarch64.tar.gz
$ tar xzf enterprise-search-8.12.1.tar.gz 
$ cd enterprise-search-8.12.1
$ ls
LICENSE    NOTICE.txt README.md  bin        config     lib        metricbeat

如上所示,它含有一個叫做 config 的目錄。我們在啟動? Enterprise Search 之前,必須做一些相應的配置。我們需要修改 config/enterprise-search.yml 文件。在這個文件中添加如下的內容:

config/enterprise-search.yml

allow_es_settings_modification: true
secret_management.encryption_keys: ['6c49f8004bfd5cb8c754c8e2f1cbe1f2793624545d052ab48fb37adc481f7d9b']
elasticsearch.username: elastic
elasticsearch.password: "q2rqAIphl-fx9ndQ36CO"
elasticsearch.host: https://127.0.0.1:9200
elasticsearch.ssl.enabled: true
elasticsearch.ssl.certificate_authority: /Users/liuxg/elastic/elasticsearch-8.12.0/config/certs/http_ca.crt
kibana.external_url: http://localhost:5601

在上面,請注意 elasticsearch.password 是我們在 Elasticsearch 安裝過程中生成的密碼。elasticsearch.ssl.certificate_authority 必須根據自己的 Elasticsearch 安裝路徑中生成的證書進行配置。在上面的配置中,如果我們沒有配置 secret_management.encryption_keys。我們可以使用上面的配置先運行,然后讓系統幫我們生成。在配置上面的密碼時,我們需要添加上引號。我發現在密碼中含有 * 字符會有錯誤的信息。我們也可以參考鏈接來生成上面的?secret_management.encryption_keys。

$ openssl rand -hex 32
6c49f8004bfd5cb8c754c8e2f1cbe1f2793624545d052ab48fb37adc481f7d9b

我們使用如下的命令來啟動:

bin/enterprise-search

在啟動的過程中,我們可以看到生成的用戶名及密碼信息:

      username: enterprise_searchpassword: uy5o6eyssksychcx

我們記下這個用戶名及密碼。在啟動的過程中,我們還可以看到一個生成的?secret_session_key:

我們也把它拷貝下來,并添加到配置文件中去:

allow_es_settings_modification: true
secret_management.encryption_keys: ['6c49f8004bfd5cb8c754c8e2f1cbe1f2793624545d052ab48fb37adc481f7d9b'] 
elasticsearch.username: elastic
elasticsearch.password: "q2rqAIphl-fx9ndQ36CO"
elasticsearch.host: https://127.0.0.1:9200
elasticsearch.ssl.enabled: true
elasticsearch.ssl.certificate_authority: /Users/liuxg/elastic/elasticsearch-8.12.0/config/certs/http_ca.crt
kibana.external_url: http://localhost:5601secret_session_key: fcb5ecfd38095e81c66a36dd5ee0ea076dcb80d9a7dc7f67d46a19ba2390e07d0c71cb6895d8dba05425aa024f2dbad24fafd7310461cf14aa72492ddc39dde7feature_flag.elasticsearch_search_api: true

為了能夠使得我們能夠在 App Search 中使用 Elasticsearch 搜索,我們必須設置
feature_flag.elasticsearch_search_api: true。?我們再次重新啟動 enterprise search:

./bin/enterprise-search 

這次啟動后,我們再也不會看到任何的配置輸出了。這樣我們的 enterprise search 就配置好了。

啟動白金試用

由于使用 ELSER 需要用到機器學習的功能,我們需要啟動白金試用:

部署 ELSER

上面的下載過程講持續一段時間。這個依賴于你的網絡速度。

從上面的顯示中,我們可以看出來,ELSER v2 的部署已經是成功的。

配置 Elastic 網絡爬蟲

現在你已經創建了部署,是時候將數據導入 Elasticsearch 了。 讓我們使用 Elastic 的網絡爬蟲來完成此操作。 首先,在 “Search” 選項卡下,

要設置網絡爬蟲,請查看此指南或按照以下說明操作:

現在創建一個索引。 為了本指南的目的,我們通過 elastic.co 攝取博客。

為索引命名后,選擇 “Create inddex”。 接下來,你將 Validate Domain,然后選擇 Add domain。

在右下角添加域后,你將選擇 “Edit”,以便你可以根據需要添加 subdomain。

接下來,您將選擇抓取規則并添加抓取規則,如下所示 .*

我們將提供抓取規則,以僅定位包含整個 elastic.co 網站上的博客的頁面。由于你要抓取的頁面將有鏈接到的頁面,因此你應該添加附加規則以禁止這些鏈接和任何其他鏈接。

接下來,當你稍后選擇字段時,某些字段會超過 512 個標記計數,例如 body_content。 你應該利用提取規則僅過濾掉博客的相關部分。我們將配置一個提取規則,以便僅提取 “main” 頁面元素的內容,該元素包含要爬網的每個博客文章的內容。

使用 Elastic Learned Sparse Encoder 豐富你的數據

按照以下說明開始使用 Elastic Learned Sparse Encoder(Elastic 的開箱即用語義搜索模型)。

為此,你將選擇 Pipeline 并通過選擇頂部的 Copy and customize?來?Unlock your custom pipelines。 接下來,在?Machine Learning Inference Pipelines下,選擇?Deploy?以下載模型并將其安裝到你的 Elasticsearch 部署中。

現在,你需要選擇要應用 ?ELSER text expansion?的字段。 選擇 “title” 和 “main” 作為源字段,然后添加。

接下來,單擊 Continue。

現在你已經創建了 pipeline,請選擇右上角的 “Crawl”,然后選擇 “Crawl all domains on this index”。

我們需要一定的時間才能完成。

為了能夠驗證我們是否已經正確地配置了 Crawler,我們可以在 Kibana 中進行查看:

從上面的輸出中,我們可以看到我們的配置是正確的。我們可以看到想要的字段已經相應的 text expansion 字段。

整個網站的爬蟲是需要一定的時間。我們需要耐心等待。

使用 Elasticsearch

創建搜索查詢

現在是時候搜索你要查找的信息了。 有兩種推薦的方法可以做到這一點:第一種是使用開發工具。 如果你是正在實施搜索(即針對你的 Web 應用程序)的開發人員,你應該使用開發工具來測試和優化索引數據的搜索結果。

在下面,我們了解如何利用開發工具。

GET search-blogs/_search
{"_source": ["title"],"query": {"multi_match": {"query": "Implement a vector database","fields": ["title", "main"]}}
}

這是一個正常的搜索。它沒有使用向量搜索。

接下來,我們使用 ELSER 來進行向量搜索:

GET search-blogs/_search
{"_source": ["title"],"query": {"text_expansion": {"ml.inference.main_expanded.predicted_value": {"model_id": ".elser_model_2","model_text": "Implement a vector database"}}}
}

從上面的搜索結果上看,我們可以看到搜索的結果有一點不一樣。通常向量搜索可以帶給我們更好的語義搜索的結果。

使用 kNN 向量搜索進行攝取和搜索?

我們可以閱讀文章 “ChatGPT 和 Elasticsearch:OpenAI 遇見私有數據(二)” 以了解更多。

更多閱讀:Enterprise:Web Crawler 基礎 (一) (二)?

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

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

相關文章

ngnix網站服務詳解

一 Nginx的簡介 1 Nginx: ①Nginx 是開源、高性能、高可靠的 Web 和反向代理服務器,而且支持熱部署,幾乎可以做到 7 * 24 小時不間斷運行,即使運行幾個月也不需要重新啟動,還能在不間斷服務的情況下對軟件版本進行熱…

2月22日作業,按鍵中斷LED燈控制

1.使用GPIO子系統&#xff0c;編寫LED驅動&#xff0c;應用程序測試 mychrdev.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include <linux/of.h> …

微軟Azure OpenAI的 GPT 接口使用小結

直接使用OpenAI的 GPT服務&#xff0c;在國內環境使用上會一些相關問題&#xff0c;微軟提供了OpenAI的服務&#xff0c;基本上可以滿足的相關的需要。下面提供一些簡單的使用操作&#xff0c;來讓你快速使用到 GPT 的服務。 前提&#xff1a;注冊Azure的賬戶&#xff0c;并綁…

OpenCV中的normalize函數以及NORM_MINMAX、NORM_INF、NORM_L1、NORM_L2具體應用介紹

在OpenCV中&#xff0c;normalize函數用于將圖像或矩陣的值規范化到一個特定的范圍內。這在圖像處理中非常有用&#xff0c;比如在調整圖像的對比度、準備數據進行機器學習處理時。規范化可以提高不同圖像之間的可比性&#xff0c;或是為了滿足特定算法對數據范圍的要求。 nor…

數的反碼和補碼表示

2.反碼 反碼的表示方法是: 正數的反碼是其本身負數的反碼是在其原碼的基礎上,符號位不變&#xff0c;其余各個位取反 [1][000000011原[000000011反[-1][10000001]原[11111110]反 3.補碼 補碼的表示方法是: 正數的補碼就是其本身 負數的補碼是在其原碼的基礎上,符號位不變,其余各…

36、IO進程線程/進程和線程之間的通信練習

一、使用有名管道完成兩個進程的相互通信(提示&#xff1a;可以使用多進程或多線程完成)。 代碼1&#xff1a;創建兩個有名管道文件 #include<myhead.h>int main(int argc, const char *argv[]) {if(mkfifo("./mingtohua",0664)-1)//創建小明向小華發信息的管…

Stable Diffusion 繪畫入門教程(webui)-ControlNet(深度Depth)

上篇文章介紹了線稿約束&#xff0c;這篇文章介紹下深度Depth 文章目錄 一、選大模型二、寫提示詞三、基礎參數設置四、啟用ControlNet 顧名思義&#xff0c;就是把原圖預處理為深度圖&#xff0c;而深度圖可以區分出圖像中各元素的遠近關系&#xff0c;那么啥事深度圖&#xf…

c/c++ | 字符串函數總結 | 為什么總喜歡糾結sizeof 和strlen 呢?

其實時間長了&#xff0c;稍微研究后&#xff0c;再來品味&#xff0c;別有一番滋味 總是看著混亂&#xff0c;但是靜下來看&#xff0c;還是能琢磨透的&#xff0c;只是看著復雜&#xff0c;本質是兩套風格&#xff0c;然后又要有交集&#xff0c;所以就看起來復雜 // 首先字符…

目標管理SMART原則

SMART原則是一種目標管理方法&#xff0c;它包括以下五個要素&#xff1a; 具體性&#xff08;Specific&#xff09;&#xff1a;目標應該是明確的&#xff0c;具體地說明要達成的行為標準。例如&#xff0c;一個目標可能描述為“減少客戶投訴率”&#xff0c;而不是“增強客戶…

本機防攻擊簡介

定義 在網絡中&#xff0c;存在著大量針對CPU&#xff08;Central Processing Unit&#xff09;的惡意攻擊報文以及需要正常上送CPU的各類報文。針對CPU的惡意攻擊報文會導致CPU長時間繁忙的處理攻擊報文&#xff0c;從而引發其他業務的中斷甚至系統的中斷&#xff1b;大量正常…

惠爾頓 網絡安全審計系統 任意文件讀取漏洞復現

0x01 產品簡介 惠爾頓網絡安全審計產品致力于滿足軍工四證、軍工保密室建設、國家涉密網絡建設的審計要求&#xff0c;規范網絡行為&#xff0c;滿足國家的規范&#xff1b;支持1-3線路的internet接入、1-3對網橋&#xff1b;含強大的上網行為管理、審計、監控模塊&#xff1b…

【2024軟件測試面試必會技能】Requests(5):Requests模塊_設置代理

設置代理 代理&#xff08;英語&#xff1a;Proxy&#xff09;&#xff0c;也稱網絡代理&#xff0c;是一種特殊的網絡服務&#xff0c;英文全稱是&#xff08;Proxy Server&#xff09;&#xff0c;其功 能就是代理網絡用戶去取得網絡信息。形象的說&#xff1a;它是網絡信息…

正向代理和反向代理釋義

代理 客戶端 代理 服務端 對客戶端而言&#xff0c;代理是服務端&#xff1b;對服務端而言&#xff0c;代理是客戶端。這個很好理解吧&#xff0c;以祖孫三代關系為例&#xff0c;爸爸在兒子面前是爸爸&#xff0c;爸爸在爺爺面前是兒子。 無論是正向代理還是反向代理&#…

Android14 InputManager-ANR原理

目標窗口查找時&#xff0c;作為派發目標的窗口必須已經準備好接收新的輸入事件&#xff0c;否則判定窗口處于未響應狀態&#xff0c;終止事件的派發過程&#xff0c;并在一段時間后再試。倘若5s后窗口仍然未準備好接收輸入事件&#xff0c;將導致ANR。直接引發ANR的原因有很多…

操作系統學習記錄

系統篇 內核 應用和底層硬件&#xff08;CPU、內存、硬盤等&#xff09;的連接橋梁。 用戶態和內核態 CPU和進程可以在兩種態下運行。 內核態可以直接訪問所有硬件資源&#xff0c;用戶態需要通過“系統調用”陷入到內核態才能否則只能訪問用戶空間地址的內存&#xff08;虛…

P8630 [藍橋杯 2015 國 B] 密文搜索

P8630 [藍橋杯 2015 國 B] 密文搜索 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn)https://www.luogu.com.cn/problem/P8630 題目分析 基本上是hash的板子&#xff0c;但實際上對于密碼串&#xff0c;只要判斷主串中任意連續的八個位置是否存在密碼串即可&#xff1b;那么我們…

PHP學習筆記1——html標簽以及頭部元素頁面布局

html是一種超文本標識符號&#xff0c;用來在網頁中指定顯示頁面格式顯示 基本格式 <!doctype html> <html><head><title></title> </head><body> </body></html> 包含聲明&#xff0c;框架html&#xff0c;頭部head&a…

怎么把公眾號文章鏈接做成二維碼?掃碼查看公眾號推文的方法

公眾號是現在給用戶分享內容的一種方式&#xff0c;通過輸出優質的公眾號文章內容來為關注者提供信息和內容。當我們發布公眾號文章后&#xff0c;有些情況下會需要將公眾號內容生成二維碼之后&#xff0c;印刷到傳單、展板上來顯示&#xff0c;那么如何將公眾號的文章鏈接轉二…

Commonjs 和 Es Module詳解

一 前言 今天我們來深度分析一下 Commonjs 和 Es Module&#xff0c;希望通過本文的學習&#xff0c;能夠讓大家徹底明白 Commonjs 和 Es Module 原理&#xff0c;能夠一次性搞定面試中遇到的大部分有關 Commonjs 和 Es Module 的問題。 帶上疑問開始今天的分析&#xff1a; …

數字化轉型導師堅鵬:城市數字化轉型頂層規劃方法

城市數字化轉型頂層規劃方法 課程背景&#xff1a; 很多城市存在以下問題&#xff1a; 不知道如何系統地開展數字化轉型工作&#xff1f; 不清楚如何科學地制定數字化轉型戰略&#xff1f; 不知道如何高效地實施數字化轉型戰略&#xff1f; 課程特色&#xff1a; 有…