ElasticSearch 檢索文件

2021-09-08 13:31:41 字數 2980 閱讀 3373

現在elasticsearch中已經儲存了一些資料,我們可以根據業務需求開始工作了。第乙個需求是能夠檢索單個員工的資訊。

這對於elasticsearch來說非常簡單。我們只要執行http get請求並指出文件的「位址」——索引、型別和id既可。根據這三部分資訊,我們就可以返回原始json文件:

檢索命令如下:

get請求非常簡單——你能輕鬆獲取你想要的文件。讓我們來進一步嘗試一些東西,比如簡單的搜尋!

我們依然使用megacorp索引和employee型別,但是我們在結尾使用關鍵字_search來取代原來的文件id。響應內容的hits陣列中包含了我們所有的三個文件。預設情況下搜尋會返回前10個結果

檢索命令:curl -xget http://localhost:9200/megacorp/employee/_search?pretty

注意:響應內容不僅會告訴我們哪些文件被匹配到,而且這些文件內容完整的被包含在其中—我們在給使用者展示搜尋結果時需要用到的所有資訊都有了。

接下來,讓我們搜尋姓氏中包含「smith」的員工,我們在請求中依舊使用_search關鍵字,然後將查詢語句傳遞給引數q=。這樣就可以得到所有姓氏為smith的結果:

查詢語句:curl -xget http://localhost:9200/megacorp/employee/_search?q=last_name:smith

查詢字串搜尋便於通過命令列完成特定(ad hoc)的搜尋,但是它也有侷限性(參閱簡單搜尋章節)。elasticsearch提供豐富且靈活的查詢語言叫做dsl查詢(query dsl),它允許你構建更加複雜、強大的查詢。

dsl(domain specific language特定領域語言)以json請求體的形式出現。我們可以這樣表示之前關於「smith」的查詢:

我們讓搜尋稍微再變的複雜一些。我們依舊想要找到姓氏為「smith」的員工,但是我們只想得到年齡大於30歲的員工。我們的語句將新增過濾器(filter),它使得我們高效率的執行乙個結構化搜尋:

到目前為止搜尋都很簡單:搜尋特定的名字,通過年齡篩選。讓我們嘗試一種更高階的搜尋,全文搜尋——一種傳統資料庫很難實現的功能。

我們將會搜尋所有喜歡「rock climbing」的員工:

可以看到我們使用了之前的match查詢,從about欄位中搜尋"rock climbing",我們得到了兩個匹配文件

預設情況下,elasticsearch根據結果相關性評分來對結果集進行排序,所謂的「結果相關性評分」就是文件與查詢條件的匹配程度。很顯然,排名第一的john smithabout字段明確的寫到「rock climbing」。

但是為什麼jane smith也會出現在結果裡呢?原因是「rock」在她的abuot欄位中被提及了。因為只有「rock」被提及而「climbing」沒有,所以她的_score要低於john。

這個例子很好的解釋了elasticsearch如何在各種文字欄位中進行全文搜尋,並且返回相關性最大的結果集。相關性(relevance)的概念在elasticsearch中非常重要,而這個概念在傳統關係型資料庫中是不可想象的,

因為傳統資料庫對記錄的查詢只有匹配或者不匹配。

目前我們可以在字段中搜尋單獨的乙個詞,這挺好的,但是有時候你想要確切的匹配若干個單詞或者短語(phrases)。例如我們想要查詢同時包含"rock"和"climbing"(並且是相鄰的)的員工記錄。

要做到這個,我們只要將match查詢變更為match_phrase查詢即可:

讓我們在之前的語句上增加highlight引數:

當我們執行這個語句時,會命中與之前相同的結果,但是在返回結果中會有乙個新的部分叫做highlight,這裡包含了來自about欄位中的文字,並且用來標識匹配到的單詞。

elasticSearch 全文檢索工具

index es裡的index相當於乙個資料庫。type 相當於資料庫裡的乙個表。id 唯一,相當於主鍵。node 節點是es例項,一台機器可以執行多個例項,但是同一臺機器上的例項在配置檔案中要確保http和tcp埠不同 下面有講 cluster 代表乙個集群,集群中有多個節點,其中有乙個會被選為主...

ElasticSearch新增 檢索資料

程式中大多的實體或物件能夠被序列化為包含鍵值對的json物件,鍵 key 是字段 field 或屬性 property 的名字,值 value 可以是字串 數字 波爾型別 另乙個物件 值陣列或者其他特殊型別,比如表示日期的字串或者表示地理位置的物件。文件元資料 document metadata 乙...

文檢索 ElasticSearch(上)

文檢索 elasticsearch 2 檢視索引列表 curl xget localhost 9200 cat nodes?v 3 檢視索引列表 curl xget localhost 9200 cat indices?v 4 建立索引 curl xput localhost 9200 custom...