zoukankan      html  css  js  c++  java
  • ElasticSearch 用ik分词器建立索引(java API)

      ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,作为当前流行的企业级搜索引擎,用于云计算中,能够达到实时搜索,并且具有稳定,可靠,快速安装,使用方便等多种优点,得到大多数企业的青睐。

      ElasicSearch可以通过终端建立索引,但是本人在做项目的时候用终端建立的索引,然后使用Java API进行数据的插入,始终得不到分词,最终的解决办法就是通过Java API进行建立索引,才避免了尴尬,不多说了。

      假设基本数据是poi:

      属性如下:

      poi_index:类似于id

      poi_title:地名  (类似于:武汉大学,华中科技大学等)

      poi_lng:经度

      poi_lat:纬度

      poi_phone:电话(一般为undefined)

      poi_address:地址   (类似于  :XX省XX市XX区XX路XX号)

      poi_tags:标签,类别 (类似于:学校,宾馆,公司等)

      

      如下,某些对象或者变量已经在全局设定好:

    //客户端设置
                settings = Settings
                        .builder()
                        .put("cluster.name", "cxy")               //节点名称, 在es配置的时候设置
                        .put("client.transport.sniff", "true")
                        .build();
                //创建客户端
                
                client = new PreBuiltTransportClient(settings)
                    .addTransportAddress(new InetSocketTransportAddress
                            (InetAddress.getByName("127.0.0.1"), 9300));  //以本机作为节点
                //创建映射
                mapping = XContentFactory.jsonBuilder()
                    .startObject()
                        .startObject("properties")
                    //      .startObject("m_id").field("type","keyword").endObject()
                            .startObject("poi_index").field("type","integer").endObject()
                            .startObject("poi_title").field("type","text").field("analyzer","ik_max_word").endObject()
                            .startObject("poi_address").field("type","text").field("analyzer","ik_max_word").endObject()
                            .startObject("poi_tags").field("type","text").field("analyzer","ik_max_word").endObject()
                            .startObject("poi_phone").field("type","text").field("analyzer","ik_max_word").endObject()
                            .startObject("poi_lng").field("type","text").endObject()
                            .startObject("poi_lat").field("type","text").endObject()
                        .endObject()
                    .endObject();
                //pois:索引名   cxyword:类型名(可以自己定义)
                PutMappingRequest putmap = Requests.putMappingRequest("pois").type("cxyword").source(mapping);
                //创建索引
                client.admin().indices().prepareCreate("pois").execute().actionGet();
                //为索引添加映射
                client.admin().indices().putMapping(putmap).actionGet();

      这个时候索引就创建好了,mapping不能掉,这相当于一扇门户,对数据按照设定规则处理,ik_max_word 是分词类型,最细粒度切割,网上搜索ik分词器的配置,这里就不说了,下一篇是往索引里面插入数据。

    既然选择了远方,便只顾风雨兼程
  • 相关阅读:
    Java tomcat max-http-header-size配置导致的oom
    Idea修改jvm参数
    Java List的SubList使用问题
    Java Arrays.asList的三个坑
    Java 重写equals的时候为什么一定要重写hashcode-一个例子
    远心镜头
    镜头常识总结
    halcon中保存图像jpeg的压缩比
    红外光 相机拍照
    电磁波的穿透能力总结
  • 原文地址:https://www.cnblogs.com/Forever-Road/p/7289368.html
Copyright © 2011-2022 走看看