Elasticsearch 查詢語法

2022-07-16 01:00:22 字數 3308 閱讀 3207

基本查詢  

get /索引庫名/_search

}}

這裡的query代表乙個查詢物件,裡面可以有不同的查詢屬性

查詢條件:查詢條件會根據型別的不同,寫法也有差異

get /test/_search

}}

結果

,

"hits": },}

]}}

match型別查詢,會把查詢條件進行分詞,然後進行查詢,多個詞條之間是or的關係

get /test/_search

}}

結果  

"hits": },}

]}

某些情況下,我們需要更精確查詢,我們希望這個關係變成and,可以這樣做:

get /test/_search}}

}

orand間二選一有點過於非黑即白。 如果使用者給定的條件分詞後有 5 個查詢詞項,想查詢只包含其中 4 個詞的文件,該如何處理?將 operator 操作符引數設定成and只會將此文件排除。

有時候這正是我們期望的,但在全文搜尋的大多數應用場景下,我們既想包含那些可能相關的文件,同時又排除那些不太相關的。換句話說,我們想要處於中間某種結果。

match查詢支援minimum_should_match最小匹配引數, 這讓我們可以指定必須匹配的詞項數用來表示乙個文件是否相關。我們可以將其設定為某個具體數字,更常用的做法是將其設定為乙個百分數,因為我們無法控制使用者搜尋時輸入的單詞數量:

get /test/_search}}

}

本例中,搜尋語句可以分為3個詞,如果使用and關係,需要同時滿足3個詞才會被搜尋到。這裡我們採用最小品牌數:75%,那麼也就是說只要匹配到總詞條數量的75%即可,這裡3*75% 約等於2。所以只要包含2個詞條就算滿足條件了。

multi_matchmatch類似,不同的是它可以在多個欄位中查詢

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...