1. 指定索引名称、索引类型、文档id查询
//
指定索引名称(
book
)
,
类型(
novel
)
,
文档
id
查询指定文档信息
GetResponse
response
=
client
.prepareGet(
"book"
,
"novel"
,
"CxbTS2IB4IMtp9nTkkmQ"
).execute().actionGet();
System.
out
.println(
response
.getSourceAsString());
|
2. 以文档中某一字段划定范围查询
//
索引(
book
),类型(
novel
)、文档字段(
word_count
)的范围从
4500
到
6000
之间的文档
RangeQueryBuilder
rangeQueryBuilder
= QueryBuilders.
rangeQuery
(
"word_count"
).from(
"4500"
).to(
"6000"
);
// RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("word_count").
gte
(4000).
lt
(5000);
SearchResponse
response
=
client
.prepareSearch(
"book"
).setTypes(
"novel"
).setQuery(
rangeQueryBuilder
).execute().actionGet();
List<Map<String, Object>>
list
=
new
ArrayList<>();
SearchHits
hits
=
response
.getHits();
for
(SearchHit
searchHit
:
hits
) {
list
.add(
searchHit
.getSource());
}
|
3. 以文档中某一字段排序并从执行分页的操作
setFrom(
0
):类似于分页的下标、索引,默认为
0
setSize(
10
):分页的每页展示的数量,默认为
10
//
查询索引(
book
)、类型(
novel
)、从第
0
条开始、查询数量为
7
并按照
word_count
字段升序排序
SearchResponse
response
=
client
.prepareSearch(
"book"
).setTypes(
"novel"
).addSort(
"word_count"
, SortOrder.
ASC
).setFrom(0).setSize(7).execute().actionGet();
List<Map<String, Object>>
list
=
new
ArrayList<>();
SearchHits
hits
=
response
.getHits();
for
(SearchHit
searchHit
:
hits
) {
list
.add(
searchHit
.getSource());
}
|
4. 组合条件查询(bool查询)
bool 过滤可以用来合并多个过滤条件查询结果的布尔逻辑,它包含一下操作符:
- must :: 多个查询条件的完全匹配,相当于 and。
- must_not :: 多个查询条件的相反匹配,相当于 not。
- should :: 至少有一个查询条件匹配, 相当于 or。
BoolQueryBuilder
boolQuery
= QueryBuilders.
boolQuery
();
boolQuery
.must(QueryBuilders.
matchQuery
(
"author"
,
"
为名
"
));
boolQuery
.must(QueryBuilders.
matchQuery
(
"title"
,
"JS
算法与编程
"
));
RangeQueryBuilder
rangeQueryBuilder
= QueryBuilders.
rangeQuery
(
"word_count"
).from(3500).to(5000);
boolQuery
.filter(
rangeQueryBuilder
);
SearchResponse
response
=
client
.prepareSearch(
"book"
).setTypes(
"novel"
).setQuery(
boolQuery
).execute().actionGet();
|
5. exist query 查询字段不为null的文档 查询字段address 不为null的数据
//
命中
publish_date
字段存在的文档
ExistsQueryBuilder
existsQuery
= QueryBuilders.
existsQuery
(
"publish_date"
);
SearchResponse
response
=
client
.prepareSearch(
"book"
).setTypes(
"novel"
).setQuery(
existsQuery
).setFrom(0).setSize(100).execute().actionGet();
|
6. 没有字段或值为null或没有值的文档
BoolQueryBuilder
notExistQuery
= QueryBuilders.
boolQuery
().
mustNot
(QueryBuilders.
existsQuery
(
"publish_date"
));
SearchResponse
response
=
client
.prepareSearch(
"book"
).setTypes(
"novel"
).setQuery(
notExistQuery
).setFrom(0).setSize(100).execute().actionGet();
|
7. 查询指定字段内容命中
MatchPhraseQueryBuilder
matchPhraseQuery
= QueryBuilders.
matchPhraseQuery
(
"title"
,
"JS
基础
"
);
SearchResponse
response
=
client
.prepareSearch(
"book"
).setTypes(
"novel"
).setQuery(
matchPhraseQuery
).setFrom(0).setSize(100).execute().actionGet();
|
8. 查询全部文档
MatchAllQueryBuilder
matchAllQuery
= QueryBuilders.
matchAllQuery
();
SearchResponse
response
=
client
.prepareSearch(
"book"
).setTypes(
"novel"
).setQuery(
matchAllQuery
).setFrom(0).setSize(100).execute().actionGet();
|
9. 多字段匹配内容查询(模糊),multiMatchQuery(text,fields)其中的fields是字段的名字,可以写好几个,每一个中间用逗号分隔。
MultiMatchQueryBuilder
multiMatchQuery
= QueryBuilders.
multiMatchQuery
(
"
测试
"
,
"author"
,
"title"
);
SearchResponse
response
=
client
.prepareSearch(
"book"
).setTypes(
"novel"
).setQuery(
multiMatchQuery
).setFrom(0).setSize(100).execute().actionGet();
|
10. 前缀查询 (一个汉字,字符小写)
PrefixQueryBuilder
prefixQuery
= QueryBuilders.
prefixQuery
(
"title"
,
"java"
);
SearchResponse
response
=
client
.prepareSearch(
"book"
).setTypes(
"novel"
).setQuery(
prefixQuery
).setFrom(0).setSize(100).execute().actionGet();
|