Elasticsearch Java API—多条件查询(must)

Posted 人艰不拆_zmc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch Java API—多条件查询(must)相关的知识,希望对你有一定的参考价值。

多条件设置

//多条件设置
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);

Demo:

package com.zx.znyd.es;
 
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;import org.apache.commons.lang.StringUtils;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.mustache.Mustache;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.MatchQueryBuilder.Operator;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
import com.alibaba.fastjson.JSONObject;
import com.zx.znyd.common.MD5;
import com.zx.znyd.common.SpringContextUtil;
import com.zx.znyd.dao.AutoReplyDao;
import com.zx.znyd.data.model.AutoReply;
import com.zx.znyd.data.model.LogIndex;
import com.zx.znyd.service.AutoReplyDeployService;
 
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class TestES {
 
    @Autowired
    @Qualifier("esClient")
    private Client client;
     
    @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)))//查询省份为江苏的       
                .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(",");
             
        } 
    } 
}

  贴下我的代码:

       /**
	 * 错误日志统计
	 */
	@Override
	public List<TomcatModel> errorTomcatRequest(Page page, String index,String startDate, String endDate) {
		TransportClient client = getClient();
		if (index.isEmpty() == true) {
			return null;
		}
		DateInterval dateInterval = RegexUtil.getDateInterval(new DateInterval(startDate,endDate),"yyyyMMdd");
		List<TomcatModel> list = new ArrayList<TomcatModel>();
		try {
			SearchResponse response = client.prepareSearch(index).setTypes(getIndexType()).setFrom(page.getStart())
					.setSize(page.getLength())
					.setQuery(QueryBuilders.boolQuery().must(QueryBuilders.regexpQuery("response", "[4-6][0-9][0-9]"))
					.must(QueryBuilders.rangeQuery("@timestamp").format("yyyyMMdd").from(dateInterval.getStartDate()).to(dateInterval.getEndDate())))
					.addSort("@timestamp", SortOrder.ASC)
					.execute().actionGet();
			SearchHits myhits = response.getHits();
			page.setRecordsFiltered((int) myhits.getTotalHits());
			page.setRecordsTotal((int) myhits.getTotalHits());

			int i = 1;
			for (SearchHit hit : myhits.getHits()) {
				TomcatModel tomcat = new TomcatModel();
				Map<String, Object> map = hit.getSource();
				tomcat.setClientip((String) map.get("clientip"));
				tomcat.setResponse((String) map.get("response"));
				tomcat.setMessage((String) map.get("message"));
				tomcat.setType((String) map.get("verb"));
				tomcat.setTimestamp((String) map.get("timestamp"));
				tomcat.setRowId(i);
				list.add(tomcat);
				i++;
			}
		} catch (IndexNotFoundException e) {
			System.err.println("此索引不存在!");
		}catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}

  

以上是关于Elasticsearch Java API—多条件查询(must)的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch Java API 很全的整理

Elasticsearch Java API - 客户端连接

java api操作elasticsearch

Elasticsearch Java API简要总汇

第08章 ElasticSearch Java API

elasticsearch java操作 api