1. 词条查询(Term Query)
词条查询是ElasticSearch的一个简单查询。它仅匹配在给定字段中含有该词条的文档,而且是确切的、未经分析的词条。term
查询 会查找我们设定的准确值。term 查询本身很简单,它接受一个字段名和我们希望查找的值。
下面代码查询将匹配 college 字段中含有"California"一词的文档。记住,词条查询是未经分析的,因此需要提供跟索引文档中的词条完全匹配的词条。请注意,我们使用小写开头的california来搜索,而不是California,因为California一词在建立索引时已经变成了california(默认分词器)。
/**
publicstaticvoidtermQuery(Clientclient,Stringindex,Stringtype){
// Query
TermQueryBuildertermQueryBuilder =QueryBuilders.termQuery("country","AWxhOn".toLowerCase());
// Search
SearchRequestBuildersearchRequestBuilder =client.prepareSearch(index);
.setTypes(type);
.setQuery(termQueryBuilder);
// 执行
SearchResponsesearchResponse =searchRequestBuilder.get();
// 结果
(searchResponse);
}
2. 多词条查询(Terms Query)
词条查询(Term Query)允许匹配单个未经分析的词条,多词条查询(Terms Query)可以用来匹配多个这样的词条。只要指定字段包含任一我们给定的词条,就可以查询到该文档。
下面代码得到所有在 country 字段中含有 “德国” 或 "比利时" 的文档。
/**
publicstaticvoidtermsQuery(Clientclient,Stringindex,Stringtype){
// Query
TermsQueryBuildertermsQueryBuilder =QueryBuilders.termsQuery("country","比利时","德国");
// Search
SearchRequestBuildersearchRequestBuilder =client.prepareSearch(index);
.setTypes(type);
.setQuery(termsQueryBuilder);
// 执行
SearchResponsesearchResponse =searchRequestBuilder.get();
// 结果
(searchResponse);
}
输出结果:
.sjf.open.api.QueryAPI-----------QueryAPIid 9score 0.4898842source {country=比利时,name=阿扎尔,club=切尔西俱乐部}
.sjf.open.api.QueryAPI-----------QueryAPIid 4score 0.39103588source {country=德国,name=穆勒,club=拜仁慕尼黑俱乐部}
.sjf.open.api.QueryAPI-----------QueryAPIid 1score 0.25427115source {country=比利时,name=德布劳内,club=曼城俱乐部}
3. 范围查询(Range Query)
范围查询使我们能够找到在某一字段值在某个范围里的文档,字段可以是数值型,也可以是基于字符串的。范围查询只能针对单个字段。
方法:
(1)gte() :范围查询将匹配字段值大于或等于此参数值的文档。
(2)gt() :范围查询将匹配字段值大于此参数值的文档。
(3)lte() :范围查询