標籤:顯示 快速 www 禁用 ice 種類型 bool 不同 term
一、 Search API
eg: GET /mall/product/_search?q=name:productName&sort=price desc
特點:search的請求參數都是以HTTP請求的的query stirng 附帶的
適用範圍:適用於臨時的在命令列使用一些工具,比如curl,快速的發出請求,來檢索想要的資訊;
適用於簡單的查詢條件
二、Query DSL
將Query DSL視為ASL查詢則有兩種類型的查詢語句:
葉子查詢語句(Leaf Query clause) :
葉子查詢語句根據指定的欄位查詢指定的值,比如match,term,rang查詢(他們也可以自己嵌套自己查詢)
複合查詢語句(compound query clause):
複合查詢語句封裝了其他葉子查詢語句或者複合查詢語句,並被用於以邏輯方式組合多個查詢(比如:bool和dis_max查詢)或者改變他們的行為(比如constant_score查詢)
查詢語句的不同行為取決於查詢語句是在query上下文還是在filter上下文內。
1、Query and filter Context (1)Query Context
在Query Context中,一個查詢語句用以回答“document與 查詢語句 是有多麼匹配”,除了決定document是否匹配,查詢語句還計算一個表示document 匹配度的分值_score,相對於其他document。
無論何時一個查詢語句被傳遞給query參數 query context都生效,就像search api裡面的query參數
注意:query參數是指 json body裡面 query:{這裡面的請求參數}
(2)Filter Context
在Filter Context中,一個查詢語句用以回答“這個document是否匹配於查詢語句”並不進行分值的計算。Filter Context通常被用於過濾結構化資料。
經常被使用的Filter,Elasticsearch將自動進行緩衝,以提升效能。
無論何時一個查詢語句傳遞給filter 參數,Filter Context都將生效,就像bool查詢中的must_not參數和filter參數。而filter參數在constant_score查詢或者filter彙總中。
2、Match All Query
//匹配所有document,預設_score分值為1
GET /_search
{
"query":{
"match_all":{}
}
}
可以通過boost修改分值
GET /_search
{
"query": {
"match_all": { "boost" : 1.2 }
}
}
match_none 與match_all相反,沒有document與之匹配
GET /_search
{
"query":{
"match_none":{}
}
}
3、Full text querise
高水平的全文檢索查詢 通常用於在全文欄位上進行全文檢索查詢,像在body和email上。他們清楚欄位是如何被查詢的並且在執行之前將每個欄位的analyzer(或者analyzer_search)應用在字串查詢中。(1) Match query
標準的全文檢索查詢,包括模糊比對,短語和近義詞查詢
match查詢接受text 文本,數字numeric,日期dates進行查詢
GET /_search
{
"query":{
"match":{
"message":"query text"
}
}
}
其中,message欄位會先被拆解,建立倒排索引
1)match
match查詢是一個boolean類型。它意味著他不僅將分析所提供的文本而且在分析處理過程中還從提供的文本中鉤子一個boolean類型的查詢。 operate標記可以設定成or或者and 以控制boolean語句(預設為or),可以使用minimum_should_match參數設定匹配的最小數的可選的should語句
analyzer可以用於控制哪個分析器analyzer將執行文本的分析處理過程,欄位預設精確匹配於定義資訊或者預設搜尋分析器。
lenient參數設定為true時將忽視由資料類型不匹配導致的異常資訊,就像嘗試用一個文本text查詢字串的方式查詢一個數字欄位。lenient參數預設情況下為false
2)Fuzziness 模糊比對
fuzziness允許基於查詢的欄位類型進行模糊比對。
prefix_length和max_expansions可以用於控制模糊處理過程,在這種情況下。如果模糊選項設定成這樣的查詢將使用top_terms_blended_freqs_${max_expansions}作為他的重寫方法,fuzzy_rewrite參數允許控制查詢如何進行重寫。
fuzzy transpostions 模糊移項(ab->ba)預設情況下是允許的,但是也可以通過設定fuzzy_transpositions設定成false來禁用掉。
GET /_search
{
"query":{
"match":{
"message":{
"query":"this is a test",
"operator":"and"
}
}
}
}
3)Zero terms query(zero_terms_query)
如果分析器移除查詢裡面的所有token就像stop過濾器所做的那樣,那麼預設的行為是將不匹配任何document。為了改變這些,可以使用zero_terms_query 選項,它接收預設值none和與match_all查詢一致的all值
GET /_search
{
"query":{
"match":{
"message":{
"query":"to be or not to be",
"operator":"and",
"zero_terms_query":"all"
}
}
}
}
4)Cutoff frequency(cutoff_frequency )
match查詢支援cutoff_frequency,即允許指定一個絕對的或者相對的文檔頻率。高頻率的片語被移動至一個任意的子查詢內。如果子查詢存在一個低頻片語 在or操作的情況下 和所有的低頻片語 都在and操作匹配的情況下這些僅僅被儲存起來。
這些查詢允許運行時動態處理stopwords的動作是領域獨立的並且不需要一個分詞stopwords檔案。它阻止得分/迭代高頻片語 並且只有更加有意義的或者低頻的片語匹配一個文檔時才考慮這些片語。但是,如果所有的查詢片語
都在所給定的cutoff_frequency值之上,則將自動被傳遞給一個純粹的串連詞(and)查詢以保證快速執行。
cutoff_frequency要麼與文檔的總數相關如果在0到1範圍內,要麼絕對大於或者等於1.0
以下這個例子展示了由專門分片語成的一個查詢:
GET /_search
{
"query":{
"match":{
"message":{
"query":" to be or not to be",
"cutoff_frequency":0.001
}
}
}
}
(2)Match Phrase Query(match_phrase)
像match查詢,但是被用於精確匹配短語或者近義詞匹配
match_phrase查詢分析指定的文本並從該分析文本中建立一個短語查詢,如下:
GET /_search
{
"query":{
"match_phrase":{
"message":"this is test"
}
}
}
在任何順序中,短語查詢匹配於一個可配置的slop(預設值為0)。轉置的項有一個值為2的slop
analyzer可以用於控制分析器將要執行的文本的分析過程。它預設為欄位顯示映射於定義或者預設的搜尋分析器
GET /_search
{
"query":{
"match_phrase":{
"message":{
"query":"this is a text",
"analyzer":"my_analyzer"
}
}
}
}
(3)Match Phrase Prefix Query(match_phrase_prefix)
官網:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html
Elasticsearch學習筆記(二)Search API 與 Query DSL