elasticSearch学习的一点心得

写在前面:因为是在实习期间接触的这个搜索引擎,所以关于引擎的管理、监控和部署本菜鸟一概未曾得到机会尝试。本篇也是完全基于应用层的尝试讲解。


本文内容主要是基于java api对elasticSearch的一些操作,目录如下:

  1. 创建对elasticSearch服务器的连接
  2. 创建mapping
  3. 对文档的增删查改
  4. 根据实际情况构建一个跨字段实体搜索
  5. 对搜索结果的分析以及调优

1、创建TransportClient对象并实例化

public static TransportClient getclient(){
        if(client!=null){
            System.out.println("client不为空!!!!!!");
            return client;
        }
        System.out.println("client为空了!!!!!!");

        long start1=System.currentTimeMillis();

        Settings settings = Settings.settingsBuilder()  
                .put(ElasticConfig.Cluster_Name, ElasticConfig.Password).build(); 
          try {
              client=TransportClient.builder().settings(settings).build()  
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ElasticConfig.Local_Host), ElasticConfig.Port));
        } catch (UnknownHostException e) {
            e.printStackTrace();
        };

        long end1=System.currentTimeMillis();
        System.out.println("elastic连接花费:"+(end1-start1));
        return client;
    }

参数说明:
ElasticConfig.Cluster_Name //elastic服务的名称
ElasticConfig.Password //elastic服务的密码
ElasticConfig.Local_Host //服务地址
ElasticConfig.Port //服务端口
以上四个参数在一般情况下可以询问elasticSearch服务器搭建人员

2、创建mapping

/**
     * 创建索引
     * @param indices  索引名称
     * @param mappingType  文档类型
     * @throws Exception 
     */
    public static void createPerMapping(String indices,String mappingType)throws Exception{
        XContentBuilder mapping = XContentFactory.jsonBuilder()
                .startObject()
                    .startObject("properties")
//文档的字段名称:persionID   字段类型:string                      .startObject("persionID").field("type","string").endObject()
//文档的字段名称:sex, 字段类型:string , search_analyzer:搜索时的分析器,analyzer:索引时的分析器 (在这里我们都是用的ik分词器,这个需要在elastic服务端进行安装)                .startObject("sex").field("type","string").field("search_analyzer","ik_max_word").field("analyzer","ik_max_word").endObject()
                        .startObject("age").field("type","string").field("search_analyzer","ik_max_word").field("analyzer","ik_max_word").field("index_options", "docs").endObject()
                        .startObject("address").field("type","string").field("search_analyzer","ik_max_word").field("analyzer","ik_max_word").endObject()
                    .endObject()
                .endObject();
        PutMappingRequest putmap = 
//test_persion:索引名称  persion:文档类型(用户可以根据需要进行自由命名)   Requests.putMappingRequest("test_persion").type("persion").source(mapping);
//getclient()获取客户端(即第一步函数的调用)
getclient().admin().indices().prepareCreate("doctor_inf_index_01").execute().actionGet();
        ElasticUtils.client.admin().indices().putMapping(putmap).actionGet();

    }

在现实中一一般会有一个实体对应着一个文档,在这个例子中我们会以以下Persion实体对象对应每一个文档对象

public class Persion implements Serializable {
    private String persionID;
    private String sex;
    private String age;
    private String address;

    //省略set/get
    @Override
    public String toString() {
        return "Persion [persionID=" + persionID + ", sex=" + sex + ", age="
                + age + ", address=" + address + "]";
    }

}

在此,我们已经做好了前期准备。可以查看已经存在一个叫test_persion的索引,并且在这个索引中存在一个叫做persion的文档,文档包含persionID、sex、age、address四个属性。完成上面的工做之后,我们需要做的就是增删差改了。

猜你喜欢

转载自blog.csdn.net/xikai18827083487/article/details/79031872
今日推荐