zoukankan      html  css  js  c++  java
  • 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中没有这么一个短语(顺序无差,且连接在一起),那么将查询不出任何结果。

    五、上图

  • 相关阅读:
    课程总结
    java实训作业----IO流
    6月11日数据结构——Huffman树
    6月10日数据结构——堆
    数据结构二叉树(实训报告)
    数据结构树(二叉树的使用)
    Java窗体的应用
    java监听、抛出异常
    数据结构顺序字符串(插入、删除、查找、BF模式匹配)
    数据结构顺序字符串
  • 原文地址:https://www.cnblogs.com/songxingzhu/p/10066061.html
Copyright © 2011-2022 走看看