Elasticsearch檢索文件。
檢索單個員工的資訊。
HTTP GET請求並指出文件的“地址”——索引、型別和ID即可。根據這三部分資訊,我們就可以返回原始JSON文件:
GET /megacorp/employee/1
注意:我們通過HTTP GET 來檢索文件,同樣的,我們可以使用 DELETE 方法刪除文件,使用 HEAD 方法檢查某文件是否存在。如果想更新已存在的文件,我們只需再 PUT 一次。
簡單搜尋
搜尋全部員工的請求。
GET /megacorp/employee/_search
響應內容的 hits 陣列中包含了我們所有的文件。預設情況下搜尋會返回前10個結果。
注意:響應內容不僅會告訴我們哪些文件會被匹配到,而且這些文件內容完整的被包含在其中——我們在給使用者展示搜尋結果時需要用到的所有資訊都有了。
搜尋姓氏為“Smith”的員工。
要做到這一點,我們將在命令列中使用輕量級的搜尋方法,這種方法常被稱為查詢字串(query string)搜尋,因為我們像傳遞URL引數一樣去傳遞查詢語句:
GET /megacorp/employee/_search?q=last_name:Smith
使用DSL語句查詢
查詢字串搜尋便於通過命令列完成特定(ad hoc)的搜尋,但是它也有侷限性。Elasticsearch提供豐富且靈活的查詢語言叫做DSL查詢(Query DSL)。他允許你構建 更加複雜、強大的查詢。DSL(Domain Specific Language特定領域語言)以JSON請求體的形式出現。
搜尋姓氏為“Smith”的員工。
GET /megacorp/employee/_search
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}
這會返回與之前查詢相同的結果。你可以看到有些東西改變了,我們不再使用查詢字串(query String)作為引數,而是使用請求體代替。這個請求使用JSON表示。
更復雜的搜尋
搜尋姓氏為“Smith”的員工,並且年齡大於30歲的員工。
GET /megacorp/employee/_search
{
"query" : {
"filtered" : {
"filter" : {
"range" : {
"age" : { "get" : 30} <1>
}
},
"query" : {
"match" : {
"last_name" : "smith" <2>
}
}
}
}
}
- <1>這部分查詢屬於區間過濾器(range filter),它用於查詢所有年齡大於30歲的資料——gt為“greater than”的縮寫。
- <2>這部分查詢與之前的match語句(query)一致。
全文搜尋
到目前為止搜尋都很簡單:搜尋特定的名字,通過年齡篩選。讓我們嘗試一種更高階的搜尋,全文搜尋——一種傳統資料庫很難實現的功能。
搜尋所有喜歡“rock climbing”的員工。
GET /megacorp/employee/_search {
"query" : {
"match" : {
"about" : "rock climbing"
}
}
}
注意:響應內容的 hits 陣列中的欄位 "_score" 是結果相關性評分。
預設情況下,Elasticsearch根據結果性評分來對結果集進行排序,所謂的“結果相關性評分”就是文件與查詢條件的匹配程度。很顯然,排名第一的 John Smith 的 about 欄位明確的寫到“rock climbing”。
但是為什麼 Jane Smith也會出現在結果裡呢?原因是“rock” 在她的 about欄位中被提及了。因為只有“rock”被提及而“climbing”沒有,所以她的 _score 要低於 John。
這個例子很好地解釋了Elasticsearch如何在各種文字欄位中進行全文搜尋,並且返回相關性最大的結果集。相關性(relevance)的概念在Elasticsearch中非常重要,而這個概念在傳統關係型資料庫中是不可想象的,因為傳統資料庫對記錄的查詢只有匹配或者不匹配。
短語搜尋。
目前我們可以在欄位中搜尋單獨的一個詞,這挺好的,但是有時候你想要確切的匹配若干個單詞或者短語(phrases)。
查詢同時包含“rock”和“climbing”(並且是相鄰的)的員工記錄。
GET /megacorp/employee/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
}
}
高亮我們的搜尋
很多應用喜歡從每個搜尋結果中高亮(highlight)匹配到的關鍵字,這樣使用者可以知道為什麼這些文件和查詢相匹配。在Elasticsearch中高亮片段是非常容易的。
讓我們在之前的語句上增加 highlight 引數 :
GET /megacorp/employee/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
},
"highlight" : {
"fields" : {
"about" : {}
}
}
}
當我們執行這個語句時,會命中與之前相同的結果,但是在返回結果中會有一個新的部分叫做 highlight,這裡包含了來自about 欄位中的文字,並且用 <em></em>來標識匹配到的單詞。
相關文章
- ElasticSearch入門檢索Elasticsearch
- ElasticSearch進階檢索Elasticsearch
- 基於ElasticSearch實現商品的全文檢索檢索Elasticsearch
- elasticsearch的實現全文檢索Elasticsearch
- Elasticsearch加速檢索的Tips總結Elasticsearch
- ElasticSearch 實現分詞全文檢索 - 概述Elasticsearch分詞
- Laravel 中文文件檢索 Alfred WorkflowLaravelAlfred
- ElasticSearch 億級資料檢索案例實戰Elasticsearch
- [轉]23個最有用的Elasticsearch檢索技巧Elasticsearch
- springboot ElasticSearch 簡單的全文檢索高亮Spring BootElasticsearch
- ElasticSearch 實現分詞全文檢索 - delete-by-queryElasticsearch分詞delete
- 讀書筆記:從Lucene到Elasticsearch:全文檢索實戰筆記Elasticsearch
- 雲脈紙質文件管理系統:多重檢索輕鬆查詢文件
- Elasticsearch 查詢結果分組統計,聚合檢索(group by stats)Elasticsearch
- 探索 Elasticsearch 8.X Terms Set 檢索的應用與原理Elasticsearch
- Elasticsearch 億級資料檢索效能最佳化案例實戰!Elasticsearch
- 擊敗二分檢索演算法——插值檢索、快速檢索演算法
- ES 24 - 如何通過Elasticsearch進行聚合檢索 (分組統計)Elasticsearch
- Elasticsearch 8.X:這個複雜的檢索需求如何實現?Elasticsearch
- 資訊檢索
- 影象檢索:資訊檢索評價指標mAP指標
- TS版LangChain實戰:基於文件的增強檢索(RAG)LangChain
- Homestead 環境下安裝 Elasticsearch 並使用 scout 進行全文檢索Elasticsearch
- Elasticsearch 刪除文件Elasticsearch
- Elasticsearch安裝文件Elasticsearch
- ElasticSearch 文件及操作Elasticsearch
- 資料檢索
- Oracle全文檢索Oracle
- 用Elasticsearch做大規模資料的多欄位、多型別索引檢索Elasticsearch多型型別索引
- Intel大書房:一站式檢索企業應用文件Intel
- 【雲圖】自有資料的多邊形檢索(雲檢索)
- ACM – 5.3 排序檢索ACM排序
- 全文檢索庫 bluge
- MySQL單表檢索MySql
- PostgreSQL一複合查詢SQL優化例子-(多個exists,範圍檢索,IN檢索,模糊檢索組合)SQL優化
- ElasticSearch 文件併發處理以及文件路由Elasticsearch路由
- 在.NET Core中使用MongoDB明細教程(2):使用Filter語句檢索文件MongoDBFilter
- ES 21 - Elasticsearch的高階檢索語法 (包括term、prefix、wildcard、fuzzy、boost等)Elasticsearch