作者:來自 Elastic?Sherry Ger, Stephen Brown
對(duì)于許多企業(yè)來說,搜索卓越中心(center of excellence - COE)向其用戶提供搜索服務(wù),從不同的數(shù)據(jù)源中整理知識(shí),并將搜索功能集成到其內(nèi)部和外部應(yīng)用程序中。Elasticsearch,這個(gè) “支撐著互聯(lián)網(wǎng)上大約 90% 的搜索欄” 的分布式搜索平臺(tái),通常是企業(yè)搜索 COE 的首選工具。隨著 ChatGPT 的廣泛流行,用戶發(fā)現(xiàn) LLM(大型語(yǔ)言模型)具有抓住含義的神奇能力。這引發(fā)了對(duì)企業(yè)搜索 COE 提供增強(qiáng)型搜索體驗(yàn)的迫切需求:一種直觀、自然、上下文驅(qū)動(dòng)且能輕松識(shí)別用戶意圖的搜索體驗(yàn)。Elasticsearch,最受歡迎的向量數(shù)據(jù)庫(kù),支持規(guī)模化的全向量搜索,并與基于轉(zhuǎn)換器的 LLM 原生集成;Elasticsearch 相關(guān)性引擎(ESRE)使搜索 COE 能夠支持安全、可擴(kuò)展且高性能的企業(yè)級(jí)語(yǔ)義搜索。
在這個(gè)兩部分的博客中,我們將探討如何使用 Elastic Learned Sparse EncodeR(ELSER)來實(shí)現(xiàn)并擴(kuò)展搜索 COE 的語(yǔ)義搜索服務(wù),ELSER 是 Elastic 訓(xùn)練的一個(gè)后交互模型,能夠提供開箱即用的語(yǔ)義搜索能力,無需任務(wù)特定的微調(diào)。我們將在博客的第一部分中探討在為開發(fā)人員提供內(nèi)部 wiki 文章的語(yǔ)義搜索的用例,實(shí)施此過程以及從中獲得的經(jīng)驗(yàn)教訓(xùn),重點(diǎn)關(guān)注以下領(lǐng)域:
- 模型選擇 - model selection
- 模式設(shè)計(jì) - schem design
- 數(shù)據(jù)攝入 - data ingestion
- 訪問控制 - access control
- 搜索技術(shù) - search techniques
備注:此博客的所有代碼和內(nèi)容都可以在這里找到。
在博客的下一部分中,我們將調(diào)查使用 Elastic Search 應(yīng)用程序向開發(fā)人員擴(kuò)展搜索服務(wù)的情況。
模型選擇
實(shí)現(xiàn)語(yǔ)義搜索的第一個(gè)任務(wù)是選擇一個(gè)嵌入模型,該模型應(yīng)具備以下特點(diǎn):
- 將文本及其含義轉(zhuǎn)換為數(shù)值向量表示
- 適用于你的用例
有許多可選項(xiàng),包括商業(yè)模型如 OpenAI、Cohere 和 Anthropic,以及 HuggingFace 上托管的開源模型,例如 Mistral 7B 或 Llama 2。此外,許多企業(yè)擁有自己的數(shù)據(jù)科學(xué)團(tuán)隊(duì),他們已經(jīng)使用內(nèi)部數(shù)據(jù)微調(diào)了自己的 LLM 模型。
選擇現(xiàn)有的 LLM 用于搜索 COE 的挑戰(zhàn)在于該模型可能已經(jīng)在特定領(lǐng)域的數(shù)據(jù)集上進(jìn)行了訓(xùn)練。通常情況下,搜索 COE 必須滿足各種各樣的用例,并且可能沒有數(shù)據(jù)科學(xué)資源來對(duì)基礎(chǔ)模型進(jìn)行領(lǐng)域適應(yīng)。
Elastic Learned Sparse EncodeR(ELSER)是一種檢索模型,專為開箱即用用例設(shè)計(jì),因此對(duì)于優(yōu)先考慮靈活性、速度和簡(jiǎn)化實(shí)施的搜索 COE 來說,選擇它是一個(gè)很容易的選擇。對(duì)于本博客,我們將使用 ELSER 來處理我們的用例,因?yàn)槲覀冎惶幚碛⑽奈臋n,并且可以通過單擊在 Elasticsearch 中部署該模型。對(duì)于多語(yǔ)言向量搜索,Elasticsearch 提供了類似的一鍵支持,支持 E5 嵌入模型。
下圖描述了向量搜索的基礎(chǔ)知識(shí)。語(yǔ)義搜索是向量搜索的一個(gè)子集,因?yàn)槲覀冎魂P(guān)注文本。
模式設(shè)計(jì)
對(duì)于我們的用例來說,一個(gè) “必須具備” 的功能是根據(jù)用戶查詢返回文章中最相關(guān)的段落,以及元數(shù)據(jù)、原始文檔的 URL、發(fā)布和更新日期以及 wiki 的來源。文檔的長(zhǎng)度不一,往往超過 ELSER 模型的最大輸入令牌限制(512),需要將文本 “分塊” 以避免截?cái)唷4送?,我們可以將文章的元?shù)據(jù)與向量嵌入一起存儲(chǔ)在 Elasticsearch 中。
與純向量數(shù)據(jù)庫(kù)不同,Elasticsearch 既可以對(duì)文本執(zhí)行傳統(tǒng)的 BM25 搜索,也可以原生地過濾和聚合元數(shù)據(jù)(時(shí)間性、數(shù)值型、空間性、布爾等)。
這意味著 Elasticsearch 可以在同一個(gè)數(shù)據(jù)存儲(chǔ)中以及在單個(gè)搜索請(qǐng)求中執(zhí)行所有這些技術(shù)以及執(zhí)行向量搜索。無需預(yù)處理/后處理文本或向量,也無需在應(yīng)用層或另一個(gè)數(shù)據(jù)存儲(chǔ)中關(guān)聯(lián)向量搜索結(jié)果。這大大降低了應(yīng)用復(fù)雜性和所需工具的數(shù)量。
有了明確的用例需求,我們就可以創(chuàng)建我們的映射了。
PUT dev_wiki_elser
{
"mappings": {
"properties": {
"@timestamp": {
"type": "date"
},
"access": {
"type": "keyword"
},
"created_at": {
"type": "date",
"format": "iso8601"
},
"key_phrases": {
"type": "text"
},
"links": {
"type": "text"
},
"passages": {
"type": "nested",
"properties": {
"is_truncated": {
"type": "boolean"
},
"model_id": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"passage_tokens": {
"type": "sparse_vector"
},
"text": {
"type": "text"
}
}
},
"source": {
"type": "keyword"
},
"summary": {
"type": "text"
},
"updated_at": {
"type": "date",
"format": "iso8601"
}
}
}
}
我們將嵌套字段類型用于原始文本塊及其使用 ELSER 創(chuàng)建的相應(yīng)稀疏向量嵌入。 嵌套字段類型是一種特殊類型,其中每個(gè)內(nèi)部文檔都作為其自己的文檔進(jìn)行索引,并且其引用與包含文檔或父文檔一起存儲(chǔ)。 使用嵌套字段類型,我們不會(huì)為每個(gè)文本塊復(fù)制元數(shù)據(jù)。 此外,我們不會(huì)索引原始文檔,因?yàn)槲臋n的各個(gè)部分在 passage 字段中可用。 另一個(gè)細(xì)節(jié)是 summary 字段包含文章的標(biāo)題。
使用 Elastic Ingest Pipeline 進(jìn)行數(shù)據(jù)攝入
Elasticsearch 的推斷處理器允許我們?cè)跀z入文檔時(shí)創(chuàng)建稀疏向量嵌入。腳本處理器將 article_content 分區(qū)為少于 512 個(gè)項(xiàng)的段落,將文本轉(zhuǎn)換為向量嵌入,并將文本和嵌入都索引到嵌套字段 passages 中。攝入管道是從博客 “通過攝入管道將大型文檔分塊加上嵌套向量等于簡(jiǎn)單的段落搜索” 中調(diào)整而來,該博客演示了使用攝入推斷處理器將文本分塊并轉(zhuǎn)換為 LLM 模型中導(dǎo)入 Elasticsearch 的密集向量的過程。在這里,我們使用相同的分塊技術(shù)通過分隔符來調(diào)用 ELSER 創(chuàng)建稀疏向量嵌入。
PUT _ingest/pipeline/elser-v2-dev-wiki2
{
"processors": [
{
"script": {
"description": "Chunk body into sentences by looking for . followed by a space",
"lang": "painless",
"source": """
String[] envSplit = /((?<!M(r|s|rs)\.)(?<=\.) |(?<=\!) |(?<=\?) )/.split(ctx['article_content']);
ctx['passages'] = new ArrayList();
int i = 0;
boolean remaining = true;
if (envSplit.length == 0) {
return
} else if (envSplit.length == 1) {
Map passage = ['text': envSplit[0]];ctx['passages'].add(passage)
} else {
while (remaining) {
Map passage = ['text': envSplit[i++]];
while (i < envSplit.length && passage.text.length() + envSplit[i].length() < params.model_limit) {passage.text = passage.text + ' ' + envSplit[i++]}
if (i == envSplit.length) {remaining = false}
ctx['passages'].add(passage)
}
}
""",
"params": {
"model_limit": 400
}
}
},
{
"foreach": {
"field": "passages",
"processor": {
"inference": {
"model_id": ".elser_model_2_linux-x86_64",
"input_output": [
{
"input_field": "_ingest._value.text",
"output_field": "_ingest._value.passage_tokens"
}
],
"on_failure": [
{
"append": {
"field": "_source._ingest.inference_errors",
"value": [
{
"message": "Processor 'inference' in pipeline 'elser-v2-dev-wiki' failed with message '{{ _ingest.on_failure_message }}'",
"pipeline": "elser-v2-dev-wiki",
"timestamp": "{{{ _ingest.timestamp }}}"
}
]
}
}
]
}
}
}
},
{
"remove": {
"field": [
"article_content"
]
}
}
]
}
作為管道的一部分,我們從索引中刪除了article_content,因?yàn)閮?nèi)容在 passages 字段的分塊中已經(jīng)可用。
這里使用的分塊技術(shù),通過句尾標(biāo)點(diǎn)創(chuàng)建 passages,是一種基本技術(shù)。有關(guān)使用各種方法進(jìn)行分塊的詳細(xì)信息和代碼,請(qǐng)參閱用于語(yǔ)義搜索的 token 計(jì)算。此外,Elasticsearch 中的原生分塊功能即將推出。
對(duì)于這篇博客,我們將使用管道攝入 4 個(gè)公開的樣本文檔。這些文檔是關(guān)于配置流量過濾的 Elastic Cloud 指南。其中一個(gè)文檔具有 "access": "private"。
POST dev_wiki_elser/_doc?pipeline=elser-v2-dev-wiki
{
"summary": "IP traffic filters",
"access": "private",
"@timestamp": "2023-08-07T08:15:12.590363000Z",
"key_phrases": """- Traffic filtering\\n- IP address \\n- CIDR block \\n- Egress IP filters \\n- Ingress IP filters\\n- Inbound IP filters\\n- Outbound IP filters\\n- IPv4 \\n- VPC Endpoint Gateway \\n- VPC Endpoint Interface \""",
"updated_at": "2023-08-07T08:15:14.756374+00:00",
"created_at": "2023-08-03T19:54:31.260012+00:00",
"links": [
"https://www.elastic.co/guide/en/cloud/current/ec-traffic-filtering-ip.html"
],
"source": "CLOUD_INFRASTRACTURE_DOCUMENT",
"article_content": """Traffic filtering, by IP address or CIDR block, is one of the security layers available in Elasticsearch Service. It allows you to limit how your deployments can be
…
Select the Delete icon. The icon is inactive if there are deployments assigned to the rule set.
"""
}
其他三個(gè)具有 “access”: “public” 屬性。 以下是有關(guān)配置 AWS Privatelink 流量過濾器的文章。
POST dev_wiki_elser/_doc?pipeline=elser-v2-dev-wiki
{
"summary": "AWS PrivateLink traffic filter",
"access": "public",
"@timestamp": "2023-08-07T08:15:12.590363000Z",
"key_phrases": "- AWS\\\\n- PrivateLink \\\\n- VPC \\\\n- VPC Endpoint \\\\n- VPC Endpoint Service \\\\n- VPC Endpoint Policy \\\\n- VPC Endpoint Connection \\\\n- VPC Endpoint Interface \\\\n- VPC Endpoint Gateway \\\\n- VPC Endpoint Interface \\",
"updated_at": "2023-08-07T08:15:14.756374+00:00",
"created_at": "2023-08-03T19:54:31.260012+00:00",
"links": [
"https://www.elastic.co/guide/en/cloud/current/ec-traffic-filtering-vpc.html"
],
"source": "CLOUD_INFRASTRACTURE_DOCUMENT",
"article_content": """Traffic filtering, to only AWS PrivateLink
…
On the Security page, under Traffic filters select Remove."""
}
另外兩個(gè)文檔非常相似,一個(gè)是關(guān)于 Azure Private Link 流量過濾器的,另一個(gè)是關(guān)于 GCP Private Service Connect 流量過濾器的。
訪問控制
Elasticsearch 支持基于角色的訪問控制,包括原生支持字段和文檔級(jí)別的訪問控制;這大大減少了保護(hù)應(yīng)用程序所需的操作和維護(hù)復(fù)雜性。在我們的開發(fā)者 wiki 用例中,我們可以根據(jù) access 字段值限制對(duì)文檔的訪問。例如,標(biāo)記為 private 的文檔不應(yīng)對(duì)屬于public_documents 用戶角色的用戶可訪問,即具有屬性access: private 的文檔對(duì)于擁有 public_documents 角色的用戶而言是不存在的。除了限制擁有 public_documents 用戶角色的用戶對(duì)文檔的訪問外,我們還可以移除對(duì) access 字段的可見性。
注意:通過 REST API PUT 角色的代碼包含在 gist 中。
用戶 sherry 具有 public_documents 角色。 對(duì)于該用戶,對(duì)索引進(jìn)行簡(jiǎn)單計(jì)數(shù)將僅返回 3 個(gè)具有 "access": "public"?屬性的文檔。
curl -u sherry:my_password -XGET https://my-cluster.aws.elastic-cloud.com/dev_wiki_elser/_count/?pretty
響應(yīng):
{
"count" : 3,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
}
}
此外,查看索引映射的調(diào)用將僅返回用戶被授權(quán)的字段。
curl -u sherry:my_password -XGET https://my-cluster.aws.elastic-cloud.com/dev_wiki_elser/_mapping/?pretty
{
"dev_wiki_elser" : {
"mappings" : {
"properties" : {
"@timestamp" : {
"type" : "date"
},
"created_at" : {
"type" : "date",
"format" : "iso8601"
},
"key_phrases" : {
"type" : "text"
},
"links" : {
"type" : "text"
},
"passages" : {
"type" : "nested",
"properties" : {
"passage_tokens" : {
"type" : "sparse_vector"
},
"text" : {
"type" : "text"
}
}
},
"source" : {
"type" : "keyword"
},
"summary" : {
"type" : "text"
},
"updated_at" : {
"type" : "date",
"format" : "iso8601"
}
}
}
}
}
有了這種基于角色的訪問控制(role-based control access - RBAC),擁有 public_documents 角色的用戶將只能搜索和訪問他們有權(quán)限的文檔和字段。這是一個(gè)簡(jiǎn)單但強(qiáng)大的例子,展示了如何在 Elasticsearch 中本地輕松地保護(hù)數(shù)據(jù)和內(nèi)容。此外,Elasticsearch 完全支持其他企業(yè)級(jí)認(rèn)證/授權(quán)框架,如 SAML、LDAP、Active Directory 等,因此利用這些框架來控制對(duì)數(shù)據(jù)的訪問只是簡(jiǎn)單的配置問題。
搜索技術(shù)
現(xiàn)在,我們準(zhǔn)備轉(zhuǎn)向語(yǔ)義搜索。請(qǐng)注意,搜索相關(guān)性調(diào)優(yōu)是一個(gè)迭代過程,可能需要我們回頭使用不同于我們已采用的模型和/或修改索引模式。
此外,向我們的語(yǔ)義搜索查詢中添加元數(shù)據(jù)過濾可以提高相關(guān)性。同時(shí),結(jié)合使用不同的搜索算法也是優(yōu)化結(jié)果的另一個(gè)選項(xiàng),比如將 BM25 與 ELSER 一起使用,使用倒數(shù)排名融合(RRF)進(jìn)行混合搜索,使用密集向量與 ELSER 以及它們的某些組合。Elasticsearch 原生支持所有這些功能。
我們用例的語(yǔ)料庫(kù),開發(fā)者 wiki 文檔,傾向于包含非常相似的主題和術(shù)語(yǔ)。以下查詢僅使用 ELSER 向量嵌入檢索關(guān)于配置過濾規(guī)則集,以連接 Google Private Service Connect 到 Elastic Cloud 部署的最相關(guān)段落。我們已將 "_source" 設(shè)置為 "false",因?yàn)槲覀冎恍枰敵?summary 或 title、URL 和文章的相關(guān)部分。為了清晰起見,我們跳過了日期。
GET dev_wiki_elser/_search
{
"_source": "false",
"fields": [
"summary",
"links"
],
"query": {
"nested": {
"path": "passages",
"score_mode": "max",
"query": {
"text_expansion": {
"passages.passage_tokens": {
"model_id": ".elser_model_2_linux-x86_64",
"model_text": "How to configure traffic filter rule set private link google"
}
}
},
"inner_hits": {
"size": 1,
"_source": false,
"fields": [
"passages.text"
]
}
}
}
}
不幸的是,返回的第一篇文章是關(guān)于如何為 AWS 配置流量過濾器集,而不是 Google Cloud 的文章。這并不令人驚訝,因?yàn)?“private link” 是一個(gè)描述 VPCs 之間安全鏈接的常用詞匯,最初由亞馬遜網(wǎng)絡(luò)服務(wù)(AWS)使用,就像 Kleenex 之于面巾紙一樣;盡管其在 Google Cloud Platform 中的等效物被稱為私有連接服務(wù),但它被用戶廣泛采用。
{
"took": 19,
"timed_out": false,
"_shards": {
…
},
"hits": {
"total": {
"value": 4,
"relation": "eq"
},
"max_score": 20.017376,
"hits": [
{
"_index": "dev_wiki_elser",
"_id": "UGxiOY0Bds674Ci9z6yW",
"_score": 20.017376,
"_source": {},
"fields": {
"summary": [
"AWS PrivateLink traffic filter"
],,
"links": ["https://www.elastic.co/guide/en/cloud/current/ec-traffic-filtering-vpc.html"]
},
"inner_hits": {
"passages": {
"hits": {
"total": {
"value": 24,
"relation": "eq"
},
"max_score": 20.017376,
"hits": [
{
"_index": "dev_wiki_elser",
"_id": "UGxiOY0Bds674Ci9z6yW",
"_nested": {
"field": "passages",
"offset": 17
},
"_score": 20.017376,
"fields": {
"passages": [
{
"text": [
"""Or, select Dedicated deployments to go to the deployments page to view all of your deployments.
Under the Features tab, open the Traffic filters page.
Select Create filter.
Select Private link endpoint.
...
這就是我們映射中的 key_phrases 字段發(fā)揮作用的地方。在我們的用例中,文章附有關(guān)鍵詞和短語(yǔ),這為將語(yǔ)義搜索與傳統(tǒng)的 BM25 搜索相結(jié)合提供了一個(gè)絕佳的方式。
通常,內(nèi)容并沒有關(guān)鍵詞/短語(yǔ),但這可以通過使用 LLM 來執(zhí)行關(guān)鍵詞提取輕松解決,這樣可以提煉出文章的精華。這可以通過使用公共的 LLM,如 OpenAI 或 Gemini,或者使用本地托管的 LLM,如 Mistral 7 或 llama2 來實(shí)現(xiàn)。請(qǐng)?jiān)谙乱黄┛椭辛粢膺@一點(diǎn)。
將我們?cè)嫉奈谋緮U(kuò)展搜索和對(duì) key_phrases 字段的 match 查詢包裹在一個(gè) bool 查詢中,確保如預(yù)期返回正確的文檔。
GET dev_wiki_elser/_search
{
"_source": "false",
"fields": [
"summary",
"links"
],
"query": {
"bool": {
"should": [
{
"nested": {
"path": "passages",
"score_mode": "max",
"query": {
"text_expansion": {
"passages.passage_tokens": {
"model_id": ".elser_model_2_linux-x86_64",
"model_text": "How to configure traffic filter rule set private link google"
}
}
},
"inner_hits": {
"size": 1,
"_source": false,
"fields": [
"passages.text"
]
}
}
},
{
"match": {
"key_phrases": "How to configure traffic filter rule set private link google"
}
}
]
}
}
}
查詢的響應(yīng)正確標(biāo)識(shí)了相關(guān)文章。
{
"took": 22,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 4,
"relation": "eq"
},
"max_score": 22.327188,
"hits": [
{
"_index": "dev_wiki_elser",
"_id": "UmxjOY0Bds674Ci9Dqzy",
"_score": 22.327188,
"_source": {},
"fields": {
"summary": [
"Google Private Service Connect"
],
"links": [
"https://www.elastic.co/guide/en/cloud/current/ec-traffic-filtering-psc.html"
]
},
"inner_hits": {
"passages": {
"hits": {
"total": {
"value": 22,
"relation": "eq"
},
"max_score": 19.884687,
"hits": [
{
"_index": "dev_wiki_elser",
"_id": "UmxjOY0Bds674Ci9Dqzy",
"_nested": {
"field": "passages",
"offset": 16
},
"_score": 19.884687,
"fields": {
"passages": [
{
"text": [
"""Add the Private Service Connect rules to your deployments
…
我們針對(duì)該用例嘗試的另一種技術(shù)是具有倒數(shù)排名融合的混合搜索。 對(duì)于我們的用例,該方法不如帶有文本擴(kuò)展和 BM25 的簡(jiǎn)單布爾查詢有效。 此外,由于我們使用的分塊技術(shù),盡管相關(guān)性很好,但響應(yīng)段落通常從段落的中間開始。 我們能夠美化應(yīng)用層的響應(yīng)。
總結(jié)
在這篇博客中,我們探索了在企業(yè)卓越中心實(shí)施語(yǔ)義搜索的過程。
- 模型選擇:ELSER 是一個(gè)為開箱即用用例設(shè)計(jì)的檢索模型,這使得它成為尋求靈活性、速度和流線型實(shí)施的搜索中心的簡(jiǎn)單選擇。
- 模式設(shè)計(jì):與純向量數(shù)據(jù)庫(kù)不同,Elasticsearch 同樣可以執(zhí)行傳統(tǒng)的 BM25 搜索,并且能夠在同一上下文數(shù)據(jù)庫(kù)和查詢中原生地過濾和聚合元數(shù)據(jù)以及向量搜索。其結(jié)果是能夠顯著簡(jiǎn)化應(yīng)用復(fù)雜性和相比于純向量數(shù)據(jù)庫(kù)所需的工具數(shù)量。使用嵌套字段類型來存儲(chǔ)原始文本的塊及其對(duì)應(yīng)的由 ELSER 創(chuàng)建的稀疏向量嵌入,是一種存儲(chǔ)和搜索數(shù)據(jù)的高效方式。
- 數(shù)據(jù)攝入:Elasticsearch 推理處理器允許我們?cè)跀z入文檔時(shí) “分塊” 并創(chuàng)建稀疏向量嵌入。這一切都可以在 Elasticsearch 內(nèi)完成,無需額外的工具和預(yù)處理。Elasticsearch 即將推出原生分塊功能。
- 訪問控制:Elasticsearch 擁有強(qiáng)大的原生 RBAC 控制,以限制/控制訪問,包括字段和文檔級(jí)別的訪問控制,這大大減少了保護(hù)數(shù)據(jù)和應(yīng)用所需的操作和維護(hù)復(fù)雜性。
- 搜索技術(shù):語(yǔ)義搜索是一個(gè)迭代過程,可能需要調(diào)整或結(jié)合多種搜索技術(shù)來產(chǎn)生最相關(guān)的結(jié)果。在這個(gè)案例中,我們發(fā)現(xiàn)純粹的語(yǔ)義文本擴(kuò)展搜索沒有提供最佳的相關(guān)性。因此,我們結(jié)合了語(yǔ)義搜索和傳統(tǒng)的 BM25 搜索對(duì)關(guān)鍵短語(yǔ)進(jìn)行過濾,以提供最佳結(jié)果。還有其他技術(shù),如倒數(shù)排序融合可以使用,盡管在這個(gè)用例中它們沒有提供更好的結(jié)果。
提醒一下,這篇博客的所有代碼和內(nèi)容都可以在這里找到。
其他注意事項(xiàng)
我們忽略的一件事是如何以可擴(kuò)展和系統(tǒng)的方式評(píng)估搜索相關(guān)性。 對(duì)于我們的用例,我們有一個(gè)測(cè)試數(shù)據(jù)集、查詢和預(yù)期結(jié)果來定量測(cè)量 “什么是好的”。 我們強(qiáng)烈建議你查看通過數(shù)據(jù)驅(qū)動(dòng)的查詢優(yōu)化提高搜索相關(guān)性,以獲得可靠的方法。
此外,調(diào)整我們的用例的語(yǔ)義搜索相關(guān)性是一個(gè)迭代過程。 對(duì)于許多搜索 COE 來說,快速啟動(dòng)、調(diào)整路線并在需要時(shí)采用不同的技術(shù)是有意義的。 LLMs 是我們工具集中一個(gè)極其靈活的工具,可以為我們的用戶提供更高級(jí)別的搜索體驗(yàn)。
下一個(gè)博客
在本博客的下一部分中,我們將了解如何以優(yōu)化且簡(jiǎn)單的方式向開發(fā)人員公開我們的 Elasticsearch 查詢,使他們能夠快速將搜索功能合并到應(yīng)用程序中。 作為其中的一部分,我們將提供關(guān)鍵字提取的示例,這可以提高搜索性能。文章來源:http://www.zghlxwxcb.cn/news/detail-848047.html
原文:https://www.elastic.co/search-labs/blog/semantic-search-as-service-at-a-search-center-of-excellence文章來源地址http://www.zghlxwxcb.cn/news/detail-848047.html
到了這里,關(guān)于Elasticsearch:語(yǔ)義搜索即服務(wù)處于卓越搜索的中心的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!