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; } |
分类:
日志
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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语句:使用策略模式优化代码结构