使用的是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));