笨鸟的平凡之路-ES的JAVA-API(模糊查询部分)

版本说明及准备工作:

es:6.7.2
我用的是IDEA的maven工程,需要将以下依赖添加到maven中

<dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.7.2</version>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>6.7.2</version>
        </dependency>
        
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.36.Final</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.11.1</version>
        </dependency>

并且需要在工程的resources目录下增加log4j2.properties文件,文件内容如下:

appender.console.type = Console
appender.console.name = console
appender.console.layout.type = PatternLayout

rootLogger.level = info
rootLogger.appenderRef.console.ref = console

Client端连接代码:

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class ElasticsearchUtils {

    private TransportClient client;

    public ElasticsearchUtils(String clusterName, String ipAddress) {

        Settings settings = Settings.builder()
                //集群名称
                .put("cluster.name", clusterName)
                .put("client.transport.ignore_cluster_name", false)
                //是否自动检查其他节点
                .put("client.transport.sniff", true)
                .build();


        try {
            client = new PreBuiltTransportClient(settings)
                    .addTransportAddress(new TransportAddress(InetAddress.getByName(ipAddress), 9300));
            //增加其它节点
//                .addTransportAddress(new TransportAddress(InetAddress.getByName("host2"), 9300));
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
 }   

ElasticsearchUtils这个类下增加searcher方法,供后续查询使用

/**
     * 执行搜索
     *
     * @param indexName    索引名称
     * @param typeName     索引类型
     * @param queryBuilder 查询条件
     * @return
     */
    public SearchResponse searcher(String indexName, String typeName,
                                   QueryBuilder queryBuilder) {
        SearchResponse searchResponse = client.prepareSearch(indexName)
                .setTypes(typeName).setQuery(queryBuilder)
                        .setSize(20)//一次返回的最多条数,默认是10条
                        .execute()
                .actionGet();//执行查询
        client.close();
        return searchResponse;
    }

新增模糊查询类:

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.WildcardQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;

import java.util.Map;

public class ES_search {
    public static void main(String[] args) {
        //创建对象,设置集群名称和IP地址
        ElasticsearchUtils es = new ElasticsearchUtils("ES",
                "worknode1");
        String indexName = "log";//索引名称
        String typeName = "doc1";//类型名称

//模糊查询
        //(1)查询条件:time字段中前缀为155977的数据,“*”表示0到多个字符,而使用“?”表示一个字符
        WildcardQueryBuilder queryBuilder = QueryBuilders.wildcardQuery("time", "155977*");
        //(2)执行查询
        SearchResponse searchResponse = es.searcher(indexName, typeName,
                queryBuilder);
        //(3)解析结果
        SearchHits hits = searchResponse.getHits();
        SearchHit[] searchHits = hits.getHits();
        for (SearchHit searchHit : searchHits) {
        //返回符合条件的document数据
            String document = searchHit.getSourceAsString();
            System.out.println(document);

//            //从map中取字段值,只是返回document中符合的字段值
//            Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();
//            String documentTitle = (String) sourceAsMap.get("time");
//            System.out.println(documentTitle);
        }
        }
 }

返回的document数据图示:
在这里插入图片描述
返回的document中符合的字段值:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值