zoukankan      html  css  js  c++  java
  • Idea操作ElasticSearch

    前提:

    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、控制台

      

     

  • 相关阅读:
    python shutil
    AttributeError: module 'shutil' has no attribute 'copyfileobj'
    python configparser
    JSON使用
    VRRP
    KeepAlived的介绍
    Nginx模块
    Nginx配置
    Nginx介绍
    apache相关补充
  • 原文地址:https://www.cnblogs.com/Zzzzn/p/12373573.html
Copyright © 2011-2022 走看看