Java调用Elasticsearch API查询及matchPhraseQuery和matchQuery的区别
一、引入依赖
<!--Elasticsearch client--> <!-- https://mvnrepository.com/artifact/org.elasticsearch.client/transport --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <version>6.2.3</version> </dependency> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>6.2.3</version> </dependency> <dependency> <groupId>org.elasticsearch.plugin</groupId> <artifactId>transport-netty4-client</artifactId> <version>6.2.3</version> </dependency>
二、上代码
import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.sort.SortOrder; import org.elasticsearch.transport.client.PreBuiltTransportClient; import org.junit.Test; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Map; public class ElasticsearchTest { @Test public void queryTest() throws UnknownHostException { //集群设置 //Settings settings = Settings.builder().put("cluster.name", "myClusterName").build(); //设置ES实例的名称 Settings settings = Settings.builder().put("client.transport.sniff", false).build(); TransportClient client = new PreBuiltTransportClient(settings); client.addTransportAddress(new TransportAddress(InetAddress.getByName("172.16.4.141"), 9300)); SearchRequestBuilder searchBuilder = client.prepareSearch("logstash-*").setSize(10).setFrom(0); searchBuilder.addSort("@timestamp", SortOrder.DESC); searchBuilder.setQuery(QueryBuilders.multiMatchQuery("Success", "logger_name", "message", "host")); searchBuilder.setQuery(QueryBuilders.matchPhraseQuery("level", "INFO")); searchBuilder.setQuery(QueryBuilders.matchPhraseQuery("appName", "backend-sync")); searchBuilder.setQuery(QueryBuilders.rangeQuery("@timestamp").from("2018-12-04T10:50:19.379Z").to("2018-12-04T10:58:19.379Z")); SearchResponse response = searchBuilder.execute().actionGet(); System.out.println("TotalHits:" + response.getHits().getTotalHits()); System.out.println("TotalHits Return:" + response.getHits().getHits().length); System.out.println("MaxScore:" + response.getHits().getMaxScore()); for (SearchHit hit : response.getHits()) { Map<String, Object> map = hit.getSourceAsMap(); if (map != null) { System.out.println(hit.getSourceAsString()); } } client.close(); } }
三、查询
说明:上文中,按timestamp倒序排列,并搜索日志中包含"Success"、Level级别为"INFO"的、AppName为"backend-sync",并取得查询到的条数。
四、说明
matchPhraseQuery和matchQuery等的区别,在使用matchQuery等时,在执行查询时,搜索的词会被分词器分词,而使用matchPhraseQuery时,不会被分词器分词,而是直接以一个短语的形式查询,而如果你在创建索引所使用的field的value中没有这么一个短语(顺序无差,且连接在一起),那么将查询不出任何结果。
五、上图
宋兴柱:转载内容,请标明出处,谢谢!源文来自 宝贝云知识分享:https://www.dearcloud.cn
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探