Elasticsearch Java API 的使用—多条件查询


//多条件设置
MatchPhraseQueryBuilder mpq1 = QueryBuilders
                .matchPhraseQuery("pointid","W3.UNIT1.10LBG01CP301");
MatchPhraseQueryBuilder mpq2 = QueryBuilders
                .matchPhraseQuery("inputtime","2016-07-21 00:00:01");
QueryBuilder qb2 = QueryBuilders.boolQuery().must(mpq1).must(mpq2);

实现多条件查询

public class EsBool{
    public void BoolSearch(TransportClient client){
        //多条件设置
        MatchPhraseQueryBuilder mpq1 = QueryBuilders
            .matchPhraseQuery("pointid","W3.UNIT1.10LBG01CP301");
        MatchPhraseQueryBuilder mpq2 = QueryBuilders
            .matchPhraseQuery("inputtime","2016-07-21 00:00:01");
        QueryBuilder qb2 = QueryBuilders.boolQuery()   
                                .must(mpq1)   
                                .must(mpq2);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(qb2);
        //System.out.println(sourceBuilder.toString());

        //查询建立
        SearchRequestBuilder responsebuilder = client
                .prepareSearch("pointdata").setTypes("pointdata");
        SearchResponse myresponse=responsebuilder
                    .setQuery(qb2)
                    .setFrom(0).setSize(50)
                    .addSort("inputtime", SortOrder.ASC)
                    //.addSort("inputtime", SortOrder.DESC)
                    .setExplain(true).execute().actionGet();
            SearchHits hits = myresponse.getHits();
            for(int i = 0; i < hits.getHits().length; i++) {
                System.out.println(hits.getHits()[i].getSourceAsString());

            }
    }
}
@Test 
    public void testSearch() 
    { 
        String index="index_log_daily";
        String type="uq_log";
        String uquestion = "139";
        String province = "江苏";
        SearchResponse searchResponse = client.prepareSearch(index) 
                .setTypes(type) 
                .setQuery(QueryBuilders.matchAllQuery()) //查询所有
                .setQuery(QueryBuilders.boolQuery()
                .must(QueryBuilders.matchQuery("uquestion", uquestion))//查询uquestion为139的
                .must(QueryBuilders.matchQuery("province", province)))//查询省份为江苏的
                //.setQuery(QueryBuilders.matchQuery("uquestion", "12599").operator(Operator.AND)) //根据tom分词查询name,默认or
                //.setQuery(QueryBuilders.matchQuery("province", "江苏").operator(Operator.AND)) //根据tom分词查询name,默认or
                //.setQuery(QueryBuilders.multiMatchQuery("tom", "name", "age")) //指定查询的字段 
                //.setQuery(QueryBuilders.queryString("name:to* AND age:[0 TO 19]")) //根据条件查询,支持通配符大于等于0小于等于19 
                //.setQuery(QueryBuilders.termQuery("name", "tom"))//查询时不分词 
                .setSearchType(SearchType.QUERY_THEN_FETCH) 
                .setFrom(0).setSize(10)//分页 
                //.addSort("age", SortOrder.DESC)//排序 
                .get(); 
           
        SearchHits hits = searchResponse.getHits(); 
        long total = hits.getTotalHits(); 
        System.out.println(total); 
        SearchHit[] searchHits = hits.hits(); 
        for(SearchHit s : searchHits) 
        { 
            System.out.println(s.getSourceAsString());
            String []logindex=s.getSourceAsString().split(",");
             
        } 
    }  

提示:根据留言区一位同学的提示,因为这篇博客写的时候比较早,属于ES早期版本,后来版本不推荐使用TransportClient client,大家考虑替换成RestHighLevelClient和SearchSourceBuilder来进行新版本的迭代。

 

 

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
根据提供的引用内容,以下是使用Elasticsearch Java API进行别名查询的示例: ```java import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.builder.SearchSourceBuilder; public class ElasticsearchAliasQueryExample { public static void main(String[] args) { // 创建RestHighLevelClient实例 RestHighLevelClient client = new RestHighLevelClient(); try { // 创建SearchRequest对象 SearchRequest searchRequest = new SearchRequest("your_index_name"); // 创建SearchSourceBuilder对象 SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); // 设置查询条件,这里使用别名查询 searchSourceBuilder.query(QueryBuilders.termQuery("your_alias_name", "your_search_term")); // 将SearchSourceBuilder对象设置到SearchRequest中 searchRequest.source(searchSourceBuilder); // 执行查询 SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); // 处理查询结果 // ... } catch (IOException e) { e.printStackTrace(); } finally { // 关闭RestHighLevelClient连接 try { client.close(); } catch (IOException e) { e.printStackTrace(); } } } } ``` 请注意,上述示例中的"your_index_name"和"your_alias_name"需要替换为实际的索引名称和别名名称。"your_search_term"需要替换为您要搜索的实际术语。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Soyoger

听说打赏的都进了福布斯排行榜。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值