這里主要是一些簡單的ElasticSearch的搜索功能,復雜的搜索,比如過濾,聚合等以后單獨在寫
1. 搜索全部
GET book/_search
直接搜索全部,下面是對搜索結果的詳細介紹:默認情況下,是查詢出來10條數據,並且按照score的由高到低順序排列的(因為搜索全部,這里沒有score,當條件搜索的時候,會出現。)
2. 單條件搜索
條件查詢分為兩類:
- match:match查詢的時候,elasticsearch會根據你給定的字段提供合適的分析器,將查詢語句分詞之后去匹配含有分詞之后詞語的。
- term:不進行分詞,直接完全匹配查詢。
- 需要注意的是:如果你搜索的字段是keyword類型,那么無論match和term都是一樣的,都不進行分詞。
//match進行查詢 GET book/novel/_search { "query": { "match": { "author": "美十與" } } } //term進行查詢 GET book/novel/_search { "query": { "term": { "author": { "value": "己平" } } } }
解釋:查詢,需要符合條件:author = “美十與”的結果。這里還有:match_all等其余的方法。
其中 :match_all的是一個空查詢,就是查詢索引類型下的所有文檔。可以查詢出所有文檔之后在進行過濾等。
3. 多條件查詢
GET book/novel/_search { "query": { "bool": { "must": [ { "match": { "wordCount": "8343705",
"author": "123"
} } ], "must_not": [ { "match": { "author": "天回" } } ] } } }
其中:bool可以用來實現多條件查詢,bool包含的屬性如下:
must:表示必須匹配的屬性,匹配這些條件才能被包含進來
must_not:表示不能匹配這些條件才能被包含進來。
should :如果滿足這些語句中的任意語句,將增加 _score ,否則,無任何影響。它們主要用於修正每個文檔的相關性得分。
filter :必須 匹配,但它以不評分、過濾模式來進行。這些語句對評分沒有貢獻,只是根據過濾標准來排除或包含文檔。
需要特別注意的是: match不支持多條件查詢,會提示 [match] query doesn't support multiple fields, found [author] and [wordCount]"。
一個復雜查詢的例子(未經驗證)
{ "bool": { "must": { "match": { "email": "business opportunity" }}, "should": [ { "match": { "starred": true }}, { "bool": { "must": { "match": { "folder": "inbox" }}, "must_not": { "match": { "spam": true }} }} ], "minimum_should_match": 1 } }
4. 排序,分頁
GET book/novel/_search { "query": { "match": { "author": "天為回" } }, "from": 0, "size":10, "sort": [ { "wordCount": { "order": "desc" } } ] }
其中:from:表示分頁開始的條數(也是從0開始),size表示你要查詢的數量。
sort:排序的字段,根據哪個字段進行如何排序,上面例子:根據wordCount字段倒序排列。