現在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 smith
的about
字段明確的寫到「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...