2019-08-29 ElasticSearch

【】

使用准备

1.运行环境需要JDK和Nodejs,分词器使用IK分词器
2.同一个IP服务端和客户端的端口号不同通信会引发跨域问题,
需要在ElasticSearch的elasticsearch.yml文件写上跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"
3.客户端根目录安装grunt
cmd窗口

npm install -g grunt-cli
npm install

4.启动服务器elasticsearch-5.6.8\bin/elasticsearch.bat
启动客户端cmd窗口 grunt server


sp20190829_214021_220.png

导入依赖

<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>

创建客户端获取连接

public static TransportClient getClient() throws UnknownHostException {
        Settings settings = Settings.EMPTY;
        TransportClient transportClient = new PreBuiltTransportClient(settings);
        transportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
        return transportClient;
    }

创建索引库

public void createIndex() throws  Exception{

        //4: 使用client对象完成索引库的创建,索引库名blog
        CreateIndexResponse response =  transportClient.admin().indices().prepareCreate("blog").get();
        System.out.println(response.isAcknowledged());
        System.out.println(transportClient);
        //5:关闭
        transportClient.close();
    }

导入docum数据

public void createIndex() throws  Exception{
        /*1:创建客户端
        TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new
                TransportAddress(InetAddress.getByName("127.0.0.1"), 9300));*/
        TransportClient client =getClient();
        //2:创建document
        XContentBuilder contentBuilder = XContentFactory.jsonBuilder().startObject()
                .field("id",1)
                .field("title","elasticsearch是一个基于lucene的搜索服务")
                .field("content","ElasticSearch是一个基于Lucene的搜索服务器。" +
                        "它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。" +
                        "Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布," +
                        "是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定," +
                        "可靠,快速,安装使用方便。")
                .endObject();
        //3:创建index
        client.prepareIndex("blog2", "article", "1").setSource(contentBuilder).get();
        //4:关闭资源
        client.close();
    }

创建mapping

mapping是用来定义表的规则,使用什么分词器使用域的范围等等。
不支持修改,需要库里的mapping为空才能创建

public void createMapping() throws Exception{
        TransportClient transportClient = getClient();
        XContentBuilder contentBuilder = XContentFactory.jsonBuilder()
                .startObject()
                .startObject("content")
                .startObject("properties")
                .startObject("id").field("type","long").field("store",true).endObject()
               //ik_max_word 最细切法 和 ik_smart 最小切法
              //创建规则mapping时候如果没有配置ik插件,这里会出现异常
 .startObject("title").field("type","text").field("store",true).field("analyzer","ik_smart").endObject()
                .startObject("content").field("type","text").field("store",true).field("analyzer","ik_smart").endObject()
                .endObject()
                .endObject()
                .endObject();

        transportClient.admin().indices()
                // 设置要做映射的索引
                .preparePutMapping("blog")
                // 设置做映射的type
                .setType("content")
                // 设置mapping信息,可以是XContentBuilder 也可以是json字符串
                .setSource(contentBuilder).get();
             transportClient.close();
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容