关耳er  

前提:

1、ES服务成功启动

  

 

 2、node.js成功启动

  

一、创建索引库

1、目录展示

  

2、导入依赖

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

    <dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>transport</artifactId>
      <version>5.6.8</version>
    </dependency>

    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-to-slf4j</artifactId>
      <version>2.9.1</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.24</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <version>1.7.21</version>
    </dependency>

    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.12</version>
    </dependency>

3、MyESTest代码

package com.zn;

import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.concurrent.ExecutionException;

public class MyESTest {

    /**
     * 创建索引
     * @throws UnknownHostException
     */
    @Test
    public void creatIndex() throws UnknownHostException {
        //创建Client连接对象
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();
        //设置IP地址和端口号
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(
                new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
        //创建名称为es_test1的索引
        client.admin().indices().prepareCreate("es_test1").get();
        //释放资源
        client.close();
    }
}

4、修改elasticsearch.yml配置文件

  cluster.name与代码块中cluster.name必须一致!!

  

5、重启elasticsearch

6、控制台效果

  

7、访问localhost:9100查看

  

   

二、创建映射mapping

1、MyESTest代码

package com.zn;

import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.concurrent.ExecutionException;

public class MyESTest {

    /**
     * 创建映射mapping
     */
    @Test
    public void creatMapping() throws IOException, ExecutionException, InterruptedException {
        //创建Client连接对象
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();
        //设置IP地址和端口号
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(
                new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

        //添加映射
        XContentBuilder builder= XContentFactory.jsonBuilder()
                .startObject()
                .startObject("article")
                .startObject("properties")
                .startObject("id")
                .field("type","integer").field("store","yes")
                .endObject()
                .startObject("title")
                .field("type","string").field("store","yes").field("analyzer","ik_smart")
                .endObject()
                .startObject("content")
                .field("type","string").field("store","yes").field("analyzer","ik_smart")
                .endObject()
                .endObject()
                .endObject()
                .endObject();
        //创建映射
        PutMappingRequest mappingRequest= Requests.putMappingRequest("es_test1").type("article").source(builder);
        client.admin().indices().putMapping(mappingRequest).get();
        //释放资源
        client.close();
    }
}

2、访问localhost:9100查看

  

3、查看mappings

  

三、创建索引库指定Mapping信息

1、MyESTest代码

package com.zn.myTest;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zn.entity.Article;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Iterator;
import java.util.concurrent.ExecutionException;

public class MyESTest {

    /**
     * 创建索引库指定Mapping信息
     */
    @Test
    public void createIndexAndMapping() throws IOException {
        //创建Client连接对象
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();
        //设置IP地址和端口号
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(
                new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
        //创建索引库
        client.admin().indices().prepareCreate("es_test2").get();
        //创建Mapping信息
        //创建一个XContentBuilder对象,用于拼接JSON格式字符串
        XContentBuilder xContentBuilder = XContentFactory.jsonBuilder();
        xContentBuilder.startObject().startObject("article1").startObject("properties")
                .startObject("id").field("type","integer").field("store","yes").field("index","not_analyzed")
                .endObject()
                .startObject("title").field("type","text").field("store","yes").field("index","analyzed").field("analyzer","ik_max_word")
                .endObject()
                .startObject("content").field("type","text").field("store","yes").field("index","analyzed").field("analyzer","ik_max_word")
                .endObject()
                .endObject().endObject().endObject();


        client.admin().indices().preparePutMapping("es_test2").setType("article1").setSource(xContentBuilder).get();

        //关闭资源
        client.close();
    }

}

2、访问localhost:9100查看

  

  

 

 

 

四、删除索引库

1、MyESTest代码

package com.zn.myTest;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zn.entity.Article;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Iterator;
import java.util.concurrent.ExecutionException;

public class MyESTest {

    /**
     * 删除索引库
     */
    @Test
    public void deleteIndex() throws UnknownHostException {
        //创建Client连接对象
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();
        //设置IP地址和端口号
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(
                new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
        //删除索引库
        client.admin().indices().prepareDelete("es_test2").get();

        //关闭资源
        client.close();
    }

}

2、删除前

  

3、删除后

  

五、通过XContentBuilder建立文档document 

1、MyESTest代码

package com.zn;

import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.concurrent.ExecutionException;

public class MyESTest {

    /**
     * 通过XContentBuilder创建文档document
     */
    @Test
    public void createXContentBuilderDocument() throws IOException {
        //创建Client连接对象
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();
        //设置IP地址和端口号
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(
                new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

        //创建文档信息
        XContentBuilder builder = XContentFactory.jsonBuilder()
                .startObject()
                .field("id", 1)
                .field("title", "ElasticSearch是一个基于Lucene的搜索服务器")
                .field("content",
                        "它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。" +
                                "Elasticsearch是用 Java开发的,并作为Apache许可条款下的开放源码发布," +
                                "是当前流行的企业级搜索引擎。设计用于云计算中,能够达到 实时搜索,稳定,可靠,快速,安装使用方便。")
                .endObject();
        //创建文档对象
        //参数一:索引对象;参数二:类型;参数三:建立id
        client.prepareIndex("es_test1", "article", "1").setSource(builder).get();
        //释放资源
        client.close();
    }
}

2、访问localhost:9100查看

  

六、使用Jackson转换实体建立文档document 

1、目录展示

  

2、创建Article实体

package com.zn.entity;

public class Article {
    
    private Integer id;
    private String title;
    private String content;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

3、添加jackson坐标 (导入依赖)

  

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.8.1</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.8.1</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.8.1</version>
    </dependency>

4、MyESTest代码

package com.zn.myTest;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zn.entity.Article;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.concurrent.ExecutionException;

public class MyESTest {
    /**
     * 使用Jackson转换实体建立文档document
     */
    @Test
    public void creatJacksonDocument() throws UnknownHostException, JsonProcessingException {
        //创建Client连接对象
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();
        //设置IP地址和端口号
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(
                new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

        //描述json 数据
        Article article = new Article();
        article.setId(2);
        article.setTitle("搜索工作其实很快乐");
        article.setContent("我们希望我们的搜索解决方案要快,我们希望有一个零配置和一个完全免费的搜索模式");

        ObjectMapper objectMapper=new ObjectMapper();

        //创建文档
        client.prepareIndex("es_test1","article",article.getId().toString())
                .setSource(objectMapper.writeValueAsString(article).getBytes(),
                        XContentType.JSON).get();
        
        //释放资源
        client.close();

    }
}

5、访问localhost:9100查看

  

七、关键词查询文档document 

1、MyESTest代码

package com.zn.myTest;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zn.entity.Article;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
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.jupiter.api.Test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Iterator;
import java.util.concurrent.ExecutionException;

public class MyESTest {
    /**
     * 关键词查询文档document
     */
    @Test
    public void selectWordDocument() throws UnknownHostException {
        //创建Client连接对象
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();
        //设置IP地址和端口号
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(
                new InetSocketTransportAddress(InetAddress.
                        getByName("127.0.0.1"), 9300));

        //设置搜索条件
        SearchResponse searchResponse = client.prepareSearch("es_test1")
                .setTypes("article")
                .setQuery(QueryBuilders.termQuery("content","搜索")).get();

        //获取命中次数,查询结果有多少对象
        SearchHits hits = searchResponse.getHits();
        System.out.println("查询结果有:"+hits.getTotalHits()+"条");
        //遍历搜索结果数据
        Iterator<SearchHit> iterator = hits.iterator();
        while (iterator.hasNext()){
            //每个查询对象
            SearchHit searchHit = iterator.next();
            //获取字符串格式打印
            System.out.println(searchHit.getSourceAsString());
            System.out.println("title:"+searchHit.getSource().get("title"));
        }

        //释放资源
        client.close();

    }
}

2、控制台

  

八、字符串查询文档document 

1、MyESTest代码

package com.zn.myTest;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zn.entity.Article;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
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.jupiter.api.Test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Iterator;
import java.util.concurrent.ExecutionException;

public class MyESTest {

    /**
     * 字符串查询文档document
     */
    @Test
    public void selectStringDocument() throws UnknownHostException {
        //创建Client连接对象
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();
        //设置IP地址和端口号
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(
                new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

        //设置搜索条件
        SearchResponse searchResponse = client.prepareSearch("es_test1")
                .setTypes("article")
                .setQuery(QueryBuilders.queryStringQuery("搜索")).get();

        //获取命中次数,查询结果有多少对象
        SearchHits hits = searchResponse.getHits();
        System.out.println("查询结果有:"+hits.getTotalHits()+"条");
        //遍历搜索结果数据
        Iterator<SearchHit> iterator = hits.iterator();
        while (iterator.hasNext()){
            //每个查询对象
            SearchHit searchHit = iterator.next();
            //获取字符串格式打印
            System.out.println(searchHit.getSourceAsString());
            System.out.println("title:"+searchHit.getSource().get("title"));
        }
        //释放资源
        client.close();
    }
}

2、控制台

  

九、使用文档id查询文档

1、MyESTest代码

package com.zn.myTest;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zn.entity.Article;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
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.jupiter.api.Test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Iterator;
import java.util.concurrent.ExecutionException;

public class MyESTest {

    /**
     * 使用文档id查询文档
     */
    @Test
    public void selectIdDocument() throws UnknownHostException {
        //创建Client连接对象
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();
        //设置IP地址和端口号
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(
                new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

        //设置搜索条件
        SearchResponse searchResponse = client.prepareSearch("es_test1")
                .setTypes("article")
                .setQuery(QueryBuilders.idsQuery().addIds("2")).get();
        //获取命中次数,查询结果有多少对象
        SearchHits hits = searchResponse.getHits();
        System.out.println("查询结果有:"+hits.getTotalHits()+"条");
        //遍历搜索结果数据
        Iterator<SearchHit> iterator = hits.iterator();
        while (iterator.hasNext()){
            //每个查询对象
            SearchHit searchHit = iterator.next();
            //获取字符串格式打印
            System.out.println(searchHit.getSourceAsString());
            System.out.println("title:"+searchHit.getSource().get("title"));
        }
        //释放资源
        client.close();
    }
}

2、控制台

  

十、删除文档

1、MyESTest代码

package com.zn.myTest;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zn.entity.Article;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Iterator;
import java.util.concurrent.ExecutionException;

public class MyESTest {
    
    /**
     * 删除文档
     */
    @Test
    public void deleteDocument() throws UnknownHostException, JsonProcessingException {
        //创建Client连接对象
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();
        //设置IP地址和端口号
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(
                new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

        //删除文档
        client.prepareDelete("es_test1","article","14").get();

        client.close();
    }

}

2、删除前

  

3、删除后

   

十一、查询文档分页操作

1、批量插入数据

package com.zn.myTest;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zn.entity.Article;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
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.jupiter.api.Test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Iterator;
import java.util.concurrent.ExecutionException;

public class MyESTest {

    /**
     * 查询文档分页操作---批量插入数据
     */
    @Test
    public void AddManyDocument() throws UnknownHostException, JsonProcessingException {
        //创建Client连接对象
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();
        //设置IP地址和端口号
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(
                new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

        ObjectMapper objectMapper=new ObjectMapper();


        for (int i=1;i<=50;i++) {
            Article article = new Article();
            //描述json 数据
            article.setId(i);
            article.setTitle(i + "搜索工作其实很快乐");
            article.setContent(i + "我们希望我们的搜索解决方案要快,我们希望有一个零配置和一个完全免费的搜索模式");

            //创建文档
            client.prepareIndex("es_test1", "article", article.getId().toString())
                    .setSource(objectMapper.writeValueAsString(article).getBytes(),
                            XContentType.JSON).get();
        }

        //释放资源
        client.close();
    }
}

2、访问localhost:9100查看

  

3、分页查询

package com.zn.myTest;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zn.entity.Article;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
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.jupiter.api.Test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Iterator;
import java.util.concurrent.ExecutionException;

public class MyESTest {

    /**
     * 分页查询
     */
    @Test
    public void selectDocument() throws UnknownHostException {
        //创建Client连接对象
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();
        //设置IP地址和端口号
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(
                new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

        //搜索数据  默认每页10条记录
        SearchRequestBuilder searchRequestBuilder = client.prepareSearch("es_test1")
                .setTypes("article")
                .setQuery(QueryBuilders.matchAllQuery());

        //从0条开始,每页5条数据
        //setFrom():从第几条开始检索,默认是0。
        //setSize():每页最多显示的记录数。
        searchRequestBuilder.setFrom(0).setSize(5);
        SearchResponse searchResponse=searchRequestBuilder.get();

        //获取命中次数,查询结果有多少对象
        SearchHits hits = searchResponse.getHits();
        System.out.println("查询结果有:"+hits.getTotalHits()+"条");
        //遍历搜索结果数据
        Iterator<SearchHit> iterator = hits.iterator();
        while (iterator.hasNext()){
            //每个查询对象
            SearchHit searchHit = iterator.next();
            //获取字符串格式打印
            System.out.println(searchHit.getSourceAsString());
            System.out.println("id:"+searchHit.getSource().get("id"));
            System.out.println("title:"+searchHit.getSource().get("title"));
            System.out.println("content:"+searchHit.getSource().get("content"));
            System.out.println("**************************************************");
        }
        //释放资源
        client.close();
    }
}

4、控制台

  

十二、查询结果高亮操作 

  在进行关键字搜索时,搜索出的内容中的关键字会显示不同的颜色,称之为高亮 
  ElasticSearch可以对查询出的内容中关键字部分进行标签和样式的设置,但是你需要告诉ElasticSearch使用什么标签对高亮关键字进行包裹 

1、高亮代码

package com.zn.myTest;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zn.entity.Article;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Iterator;
import java.util.concurrent.ExecutionException;

public class MyESTest {

    /**
     * 查询结果高亮操作
     */
    @Test
    public void selectDocumentRed() throws UnknownHostException {
        //创建Client连接对象
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();
        //设置IP地址和端口号
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(
                new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

        //设置搜索条件
        SearchRequestBuilder searchRequestBuilder = client.prepareSearch("es_test1")
                .setTypes("article")
                .setQuery(QueryBuilders.termQuery("title","搜索"));

        //设置高亮数据
        HighlightBuilder highlightBuilder=new HighlightBuilder();
        highlightBuilder.preTags("<font style='color:red'>");
        highlightBuilder.postTags("</font>");
        highlightBuilder.field("title");
        searchRequestBuilder.highlighter(highlightBuilder);

        //获取查询结果数据
        SearchResponse searchResponse = searchRequestBuilder.get();

        //获取查询结果集
        SearchHits hits = searchResponse.getHits();
        System.out.println("共搜到:"+hits.getTotalHits()+"条数据");
        //遍历结果
        for (SearchHit hit:hits){
            System.out.println("String方式打印文档搜索内容:");
            System.out.println(hit.getSourceAsString());
            System.out.println("Map方式打印高亮内容");
            System.out.println(hit.getHighlightFields());

            System.out.println("遍历高亮集合,打印高亮片段:");
            Text[] text = hit.getHighlightFields().get("title").getFragments();
            for (Text str:text){
                System.out.println(str);
            }
            System.out.println("**********************************************************8");
            //释放资源
            client.close();
        }
    }
}

2、控制台

  

 

 

posted on 2020-02-27 18:26  关耳er  阅读(5166)  评论(0编辑  收藏  举报