基本查詢
get /索引庫名/_search}}
這裡的query代表乙個查詢物件,裡面可以有不同的查詢屬性
查詢條件:查詢條件會根據型別的不同,寫法也有差異
get /test/_search}}
結果
,"hits": },}
]}}
match
型別查詢,會把查詢條件進行分詞,然後進行查詢,多個詞條之間是or的關係
get /test/_search}}
結果
"hits": },}]}
某些情況下,我們需要更精確查詢,我們希望這個關係變成and
,可以這樣做:
get /test/_search}}}
在or
與and
間二選一有點過於非黑即白。 如果使用者給定的條件分詞後有 5 個查詢詞項,想查詢只包含其中 4 個詞的文件,該如何處理?將 operator 操作符引數設定成and
只會將此文件排除。
有時候這正是我們期望的,但在全文搜尋的大多數應用場景下,我們既想包含那些可能相關的文件,同時又排除那些不太相關的。換句話說,我們想要處於中間某種結果。
match
查詢支援minimum_should_match
最小匹配引數, 這讓我們可以指定必須匹配的詞項數用來表示乙個文件是否相關。我們可以將其設定為某個具體數字,更常用的做法是將其設定為乙個百分數
,因為我們無法控制使用者搜尋時輸入的單詞數量:
get /test/_search}}}
本例中,搜尋語句可以分為3個詞,如果使用and關係,需要同時滿足3個詞才會被搜尋到。這裡我們採用最小品牌數:75%,那麼也就是說只要匹配到總詞條數量的75%即可,這裡3*75% 約等於2。所以只要包含2個詞條就算滿足條件了。
multi_match
與match
類似,不同的是它可以在多個欄位中查詢
get /test/_search}}
term
查詢被用於精確值 匹配,這些精確值可能是數字、時間、布林或者那些未分詞的字串
get /test/_search}}
terms
查詢和 term 查詢一樣,但它允許你指定多值進行匹配。如果這個字段包含了指定值中的任何乙個值,那麼這個文件滿足條件:
get /test/_search}}
預設情況下,elasticsearch在搜尋的結果中,會把文件中儲存在_source
的所有欄位都返回。
如果我們只想獲取其中的部分字段,我們可以新增_source
的過濾
get /test/_search}}
get /test/_search, "query":
}}
get /test/_search, "query":
}}
bool
把各種其它查詢通過must
(與)、must_not
(非)、should
(或)的方式進行組合
get /test/_search}, "must_not": },
"should": }}}
}
,"hits": }]
}}
range
查詢找出那些落在指定區間內的數字或者時間
get /test/_search}}}
`range`查詢允許以下字元:| 操作符 | 說明 |
| :----: | :------: |
| gt | 大於 |
| gte | 大於等於 |
| lt | 小於 |
| lte | 小於等於 |
fuzzy
查詢是term
get /test/_search}
我們可以通過fuzziness
get /test/_search}}}
條件查詢中進行過濾所有的查詢都會影響到文件的評分及排名。如果我們需要在查詢結果中進行過濾,並且不希望過濾條件影響評分,那麼就不要把過濾條件作為查詢條件來用。而是使用
filter
方式:
get /test/_search}, "filter":}}}
}}
filter
中還可以再次進行bool
組合條件過濾。
無查詢條件,直接過濾
如果一次查詢只有過濾,沒有查詢條件,不希望進行評分,我們可以使用constant_score
取代只有 filter 語句的 bool 查詢。在效能上是完全相同的,但對於提高查詢簡潔性和清晰度有很大幫助。
get /test/_search} }
}}
sort
可以讓我們按照不同的字段進行排序,並且通過order
指定排序的方式
get /test/_search},"sort": [
}]}
假定我們想要結合使用 price和 _score(得分) 進行查詢,並且匹配的結果首先按照**排序,然後按照相關性得分排序:
get /goods/_search}, "filter":}}}
},"sort": [},}
]}
ElasticSearch 翻頁查詢
相對於ealsticsearch的search api,翻頁查詢可以將查詢結果集分頁返回,而不是將所有的結果放在乙個page返回。如果查詢的結果集包含大量的資料,就可以用到翻頁查詢 scroll api,比如有200k條資料,可以將它們分成20次請求,每次只返回10k條查詢結果.有點類似於資料庫裡面...
ElasticSearch 查詢語法
author title publish date form指定從 返回 size指定返回數量 from 1 size 1 sort group by publish date 特定字段查詢所指特定值 query context 會根據匹配程度生成不同的匹配分數 全文本查詢針對文字型別 字段級別查詢...
elasticsearch高亮查詢
pageinfo elasticsearchtemplate.queryforpage query,article.class 帶條件的分頁查詢 test public void testselectpagebyid 建立querybuilder查詢條件 querybuilder querybuil...