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

多条件设置

1
2
3
4
5
6
//多条件设置
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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(",");
              
        }
    }
}

  贴下我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
   /**
 * 错误日志统计
 */
@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;
}

  


posted @   人艰不拆_zmc  阅读(2352)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示