Elasticsearch advanced query and batch insert (two)

 

package com.java.es.test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;

import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequestBuilder;
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.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class EsTest {
    //服务器地址以及端口号
    private static final String host = 本地或者服务器IP;
    private static final int port = 9300;
    //控制链接与关闭
    private TransportClient client = null;

    /**
     * 格式化日期
     */
    //public static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Test
    /**
     * 索引:database
     * 类型:table
     * 字段:author(作者),title(书名),word_count(字数),publish_date(日期)
     */
    public void test(){
        //CommonTermsQuery: 指定字段进行模糊查询
        QueryBuilder builder = QueryBuilders.commonTermsQuery("title","楼");
        //queryStringQuery:根据值去每个字段进行模糊查询 +代表必须含有  -代表不能含有
       // QueryBuilder builder = QueryBuilders.queryStringQuery("+elasticsearch -学习");
        //simpleQueryStringQuery 根据值去每个字段进行模糊查询 只要有一个符合就会返回该文章
        //QueryBuilder builder = QueryBuilders.simpleQueryStringQuery("学习  孟凡哲");
        SearchResponse response = client.prepareSearch("database").setQuery(builder).get();
        SearchHits hits = response.getHits();
        for (SearchHit hit:hits
             ) {
            System.out.println(hit.getSourceAsString());
        }
    }

    /**
     * 该程序主要想表达的是ES批量插入数据,这里使用了map,假设我们有一堆map数据值,可以使用循环导入到ES中
     * 第二个是普通的数据写入方式。我们还可以使用JSON数据格式等,主要还是看我们个人的使用需求
     */
    public void test1() throws IOException {
        Map<String, Object> map = new HashMap<String, Object>();
        BulkRequestBuilder builder = client.prepareBulk();
        IndexRequestBuilder reques = client.prepareIndex("database","renyuan","1").setSource(map);
        IndexRequestBuilder reques1 = client.prepareIndex("database","renyuan","2").setSource(
                XContentFactory.jsonBuilder()
                    .startObject()
                    .field("name","lml")
                    .field("age","23")
                    .field("sex","男"));
        builder.add(reques);
        BulkResponse response = builder.get();
        System.out.println(response.status());
        if (response.hasFailures()){
            System.out.println("操作失败");
        }
    }
    @Before
    public void before() throws UnknownHostException {
        //指定集群
        Settings settings = Settings.builder().put("cluster.name","docker-cluster").build();
        //创建链接
        client = new PreBuiltTransportClient(settings).addTransportAddresses(
                new TransportAddress(InetAddress.getByName(host),port));
    }
    @After
    public void close(){
        if (client != null) client.close();
    }
}

Here, the function of commonTermsQuery requires a deeper understanding.

Guess you like

Origin blog.csdn.net/FV8023/article/details/97129078