最近工作上有个需求需要用es的TransportClient来查询一些信息
这个查询语句翻译成sql是这样的:
SELECT *
FROM table
WHERE (to='0001' AND from='0002')
OR (to='0002' AND from='0001');
但是我上网查过基本上所有人都给的是:“使用Elastic的DSL结构化查询语句”
翻译过来大概是这样:
{
"query": {
"filtered": {
"query" : {
"match_all":{}
},
"filter" : {
"or" : [
{
"and" : [
{"term":{"to": "0001"}},
{"term":{"from": "0002"}}
]
},
{
"and" : [
{"term":{"to": "0002"}},
{"term":{"from": "0001"}}
]
}
]
}
}
}
}
但是没有一个大佬给出,用TransportClient如何写出上面的查询
下面我分享一下自己写的TransportClient实现上述查询的代码:
import org.springframework.beans.factory.annotation.Autowired;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.index.query.*;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
public class Test{
@Autowired
private TransportClient client;
public void search(){
TermQueryBuilder toQuery =null;
TermQueryBuilder fromQuery = null;
//es查询器
SearchRequest searchRequest = new SearchRequest("DB");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder orBuilder = QueryBuilders.boolQuery();
BoolQueryBuilder bqb1 = QueryBuilders.boolQuery();
//to ==and
toQuery = QueryBuilders.termQuery("message.to", chsv.getTo());
bqb1.must(toQuery);
//from ==and
fromQuery = QueryBuilders.termQuery("message.from", chsv.getFrom());
bqb1.must(fromQuery);
BoolQueryBuilder bqb2 = QueryBuilders.boolQuery();
//to ==and
toQuery = QueryBuilders.termQuery("message.to", chsv.getFrom());
bqb2.must(toQuery);
//from ==and
fromQuery = QueryBuilders.termQuery("message.from", chsv.getTo());
bqb2.must(fromQuery);
orBuilder.should(bqb1);
orBuilder.should(bqb2);
searchSourceBuilder.postFilter(orBuilder);
//执行
searchRequest.source(searchSourceBuilder);
response = client.search(searchRequest).get();
//打印
for (SearchHit searchHit:response.getHits()) {
System.out.println("返回值getSourceAsString : " + searchHit.getSourceAsString());
}
}
}
以上代码结合了spring
希望能给有需要的人带来帮助