ElasticSearch查询 基础篇
1. 查詢表達式
查詢表達式(Query DSL)是一種非常靈活又富有表現力的 查詢語言。 Elasticsearch 使用它可以以簡單的 JSON 接口來展現 Lucene 功能的絕大部分。在你的應用中,你應該用它來編寫你的查詢語句。它可以使你的查詢語句更靈活、更精確、易讀和易調試。
要使用這種查詢表達式,只需將查詢語句傳遞給?query?參數:
GET /_search {"query": YOUR_QUERY_HERE }空查詢(empty search)?—{}— 在功能上等價于使用?match_all?查詢, 正如其名字一樣,匹配所有文檔:
GET /_search {"query": {"match_all": {}} }查詢語句的結構
一個查詢語句的典型結構:
{QUERY_NAME: {ARGUMENT: VALUE,ARGUMENT: VALUE,...} }如果是針對某個字段,那么它的結構如下:
{QUERY_NAME: {FIELD_NAME: {ARGUMENT: VALUE,ARGUMENT: VALUE,...}} }2. 重要的查詢
match_all 查詢
match_all?查詢簡單的匹配所有文檔。在沒有指定查詢方式時,它是默認的查詢:
{ "match_all": {}}match 查詢
無論你在任何字段上進行的是全文搜索還是精確查詢,match?查詢是你可用的標準查詢。
如果你在一個全文字段上使用?match?查詢,在執行查詢前,它將用正確的分析器去分析查詢字符串:
{ "match": { "tweet": "About Search" }}如果在一個精確值的字段上使用它,例如數字、日期、布爾或者一個?not_analyzed?字符串字段,那么它將會精確匹配給定的值:
{ "match": { "age": 26 }} { "match": { "date": "2014-09-01" }} { "match": { "public": true }} { "match": { "tag": "full_text" }}multi_match查詢
multi_match?查詢可以在多個字段上執行相同的?match?查詢:
{"multi_match": {"query": "full text search","fields": [ "title", "body" ]} }range 查詢
range?查詢找出那些落在指定區間內的數字或者時間:
{"range": {"age": {"gte": 20,"lt": 30}} }被允許的操作符如下:
gt
大于
gte
大于等于
lt
小于
lte
小于等于
term 查詢
term?查詢被用于精確值匹配,這些精確值可能是數字、時間、布爾或者那些?not_analyzed?的字符串:
{ "term": { "age": 26 }} { "term": { "date": "2014-09-01" }} { "term": { "public": true }} { "term": { "tag": "full_text" }}term?查詢對于輸入的文本不?分析?,所以它將給定的值進行精確查詢。
terms 查詢
terms?查詢和?term?查詢一樣,但它允許你指定多值進行匹配。如果這個字段包含了指定值中的任何一個值,那么這個文檔滿足條件:
{ "terms": { "tag": [ "search", "full_text", "nosql" ] }}和?term?查詢一樣,terms?查詢對于輸入的文本不分析。它查詢那些精確匹配的值(包括在大小寫、重音、空格等方面的差異)。
?
?
?
參考文檔:https://www.elastic.co/guide/cn/elasticsearch/guide
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的ElasticSearch查询 基础篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ElasticSearch查询 第四篇:
- 下一篇: cdn与服务器的关系_掐指算算: 你的C