使用的是elasticsearch2.3.3版本,在此只是簡單介紹搜索部分的api使用api
1.簡單的matchQuery 查詢的內容會經過分詞,分詞後的數據進行檢索,只要包含其中一個分詞就會被檢索出來elasticsearch
searchRequestBuilder.setQuery(QueryBuilders.matchQuery("fieldD", "bigData is magic"));
2.matchPhraseQuery 查詢的內容經過分詞,嚴格按照分詞的出現的順序進行查詢,也就是必須包含全部分詞,且出現數據一致ui
searchRequestBuilder.setQuery(QueryBuilders.matchPhraseQuery("fieldD", "bigData spark is magic"));
詢的字段是進行分詞索引的,若是不是分詞索引則不生效, 若是隻是查詢 bigData magic ,則這種查詢是查詢不到的,須要徹底匹配,若是想要查詢到,須要設置slop(2),須要這樣查詢spa
searchRequestBuilder.setQuery(QueryBuilders.matchPhraseQuery("fieldD", "bigData spark is magic").slop(2))
3.termQuery 詞精確查詢,fieldD 分詞後包含 bigData的term的文檔code
searchRequestBuilder.setQuery(QueryBuilders.termQuery("fieldD", "bigData"));
4.terms Query 多term查詢,查詢fieldD 包含 bigData spark或storm 中的任何一個或多個的文檔orm
searchRequestBuilder.setQuery(QueryBuilders.termsQuery("fieldD", "bigData","spark","storm"));
5.rangeQuery 範圍查詢字段fieldB 大於20而且小於50 包含上下界索引
searchRequestBuilder.setQuery(QueryBuilders.rangeQuery("filedB").gt("20").lt("50").includeLower(true).includeUpper(true));
6.prefixQuery 匹配分詞前綴 若是字段沒分詞,就匹配整個字段前綴文檔
searchRequestBuilder.setQuery(QueryBuilders.prefixQuery("fieldD","spark"));
7.wildcard query 通配符查詢,支持* 任意字符串;?任意一個字符字符串
searchRequestBuilder.setQuery(QueryBuilders.wildcardQuery("fieldD","spark*"));
8.Fuzzy query 分詞模糊查詢,經過增長fuzziness 模糊屬性,來查詢term 以下 可以匹配 fieldD 爲 spar park spark前或後加一個字母的term的 文檔 fuzziness 的含義是檢索的term 先後增長或減小n個單詞的匹配查詢spark
searchRequestBuilder.setQuery(QueryBuilders.fuzzyQuery("fieldD","spark").fuzziness(Fuzziness.ONE));