查詢可以變得非常的複雜,尤其和不同的分析器與不同的字段對映結合時,理解起來就有點困難了。不過validate-query
api 可以用來驗證查詢是否合法。
get/gb/tweet/_validate/query
}}
以上validate
請求的應答告訴我們這個查詢是不合法的:
}
理解錯誤資訊
為了找出 查詢不合法的原因,可以將explain
引數 加到查詢字串中:
get/gb/tweet/_validate/query?
explain (1)
}}
explain
引數可以提供更多關於查詢不合法的資訊。
很明顯,我們將查詢型別(match
)與欄位名稱 (tweet
)搞混了:
,"explanations"
: [ ]
}
理解查詢語句
對於合法查詢,使用explain
引數將返回可讀的描述,這對準確理解 elasticsearch 是如何解析你的 query 是非常有用的:
get/_validate/query?explain
}}
我們查詢的每乙個 index 都會返回對應的explanation
,因為每乙個 index 都有自己的對映和分析器:
,"explanations"
: [ , ]
}
從explanation
中可以看出,匹配really powerful
的match
查詢被重寫為兩個針對tweet
欄位的 single-term 查詢,乙個single-term查詢對應查詢字串分出來的乙個term。
當然,對於索引us
,這兩個 term 分別是really
和powerful
,而對於索引gb
,term 則分別是realli
和power
。之所以出現這個情況,是由於我們將索引gb
中tweet
欄位的分析器修改為english
分析器。
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...