用户查询数据,因为每个用户的查询权限不一致,并不能够全部的数据都进行模糊查询,应该每个用户查询的范围不一样,但是又不能够使用gt/lt来区别范围,比如id 1 2 3 5 6 7 8 9 ,用户A只能看到1 6 7 ,如果使用大于等于1小于等于7来限定范围的话,3 5 就被A用户有可能搜索到了,这就不是权限限定的初衷。
小弟初学es,只能够通过命令结合高级api来学习
先看看es索引里面存储的数据:
这里使用命令,查询id集合,然后对集合进行模糊查询
GET bill/_search
{
"query": {
"bool": {
"must": [
{
"terms": {
"_id": [
"1",
"2",
"3",
"4"
]
}
}
, {
"match": {
"name": "小"
}
}
]
}
}
}
@Test
void get() throws IOException {
final List<String> longs = new ArrayList<String>();
longs.add("1");
longs.add("2");
longs.add("3");
longs.add("4");
SearchRequest searchRequest = new SearchRequest("bill");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("_id",longs);
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "黄");
BoolQueryBuilder boolQueryBuilder1 = boolQueryBuilder.must(matchQueryBuilder).must(termsQueryBuilder);
searchSourceBuilder.query(boolQueryBuilder1);
searchRequest.source(searchSourceBuilder);
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
final SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
for (SearchHit hit : search.getHits().getHits()) {
System.out.println(hit.getScore());
final Map<String, Object> sourceAsMap = hit.getSourceAsMap();
list.add(sourceAsMap);
}
System.out.println(list);
}
最后的执行结果: