zoukankan      html  css  js  c++  java
  • Java创建ES索引实现

    1、pom.xml文件

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    </dependency>

    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>

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

    <dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>transport</artifactId>
    <version>6.2.3</version>
    <exclusions>
    <exclusion>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    </exclusion>
    </exclusions>
    </dependency>

    2、es配置(案例使用SpringCloud)

    es.cluster-name=es
    es.ip=127.0.0.1
    es.port=9300
    es.pool=5

    3、es初始化

    @Configuration
    public class EsConfig {

    @Autowired
    private Environment env;

    @SuppressWarnings("resource")
    @Bean
    public TransportClient transportClient() throws UnknownHostException{
    Settings settings = Settings.builder()
    .put("cluster.name", env.getProperty("es.cluster-name"))
    .put("client.transport.sniff", true)
    .put("thread_pool.search.size", Integer.valueOf(env.getProperty("es.pool")))
    .build();
    TransportAddress transportAddress = new TransportAddress(InetAddress.getByName(env.getProperty("es.ip")), Integer.valueOf(env.getProperty("es.port")));
    TransportClient esClient = new PreBuiltTransportClient(settings).addTransportAddress(transportAddress);
    return esClient;
    }

    }

    4、es索引Controller

    @RestController
    public class EsController {

    @Autowired
    EsService esService;

    /**
    * 初始化es索引
    *
    * @param userCode
    * @return
    */
    @RequestMapping(value = "/es/initIndex", method = { RequestMethod.GET, RequestMethod.POST })
    public void initIndex() {
    esService.initIndex();
    }}

    5、es索引接口

    public interface EsService {

    /**
    * es索引
    * @return
    */
    void initIndex();

    }

    6、es索引接口实现

    @Service
    public class EsServiceImpl implements EsService {

    Log log = LogFactory.getLog(EsServiceImpl.class);

    @Autowired
    TransportClient client;

    public void initIndex(){
    try {
    XContentBuilder builder = XContentFactory
    .jsonBuilder()
    .startObject()
    .startObject("test")
    .startObject("properties")
    .startObject("id")
    .field("type", "integer")
    .endObject()
    .startObject("um")
    .field("type", "keyword")
    .endObject()
    .startObject("question")
    .field("type", "text")
    .field("analyzer", "ik")
    .field("search_analyzer","ik")
    .endObject()
    .startObject("questionType")
    .field("type", "integer")
    .endObject()
    .startObject("nlp")
    .field("type", "keyword")
    .endObject()
    .startObject("isHit")
    .field("type", "integer")
    .endObject()
    .startObject("isSatisfied")
    .field("type", "integer")
    .endObject()
    .startObject("opinion")
    .field("type", "keyword")
    .endObject()
    .startObject("label")
    .field("type", "keyword")
    .endObject()
    .startObject("askTimes")
    .field("type", "integer")
    .endObject()
    .startObject("createdBy")
    .field("type", "keyword")
    .endObject()
    .startObject("updatedBy")
    .field("type", "keyword")
    .endObject()
    .startObject("createdDate")
    .field("type", "date")
    //.field("format", "yyyy-MM-dd HH:mm:ss")
    .endObject()
    .startObject("updatedDate")
    .field("type", "date")
    //.field("format", "yyyy-MM-dd HH:mm:ss")
    .endObject()
    .endObject()
    .endObject()
    .endObject();

    //副本、分片

    //定义中文分词+停词
    String settingsJson = "{"
    + ""number_of_replicas": 1, "
    + ""number_of_shards": 5, "
    + ""analysis": { "
    + ""analyzer": { "
    + ""ik": { "
    + ""tokenizer": "ik_max_word", "
    + ""type": "standard", "stopwords": ["也","了","仍","从","以","使","则","却","又","及","对","就","并","很","或","把","是","的","着","给","而","被","让","在","还","比","等","当","与","于","但"] "
    + "} "
    + "} "
    + "} "
    + "}";

    // Builder settings = Settings.builder()
    // .put("number_of_replicas","1")
    // .put("number_of_shards","5");

    String mappingStr = builder.string();

    //判断索引是否存在
    client.admin().indices().prepareCreate("test_index").setSettings(settingsJson, XContentType.JSON).execute().actionGet();
    client.admin().indices().preparePutMapping("test_index").setType("test").setSource(mappingStr,XContentType.JSON).execute().actionGet();
    } catch (Exception e) {
    log.error(e.getMessage(), e);
    e.printStackTrace();
    }
    }

    }

  • 相关阅读:
    element-ui 中 el-table 根据scope.row行数据变化动态显示行内控件
    vue.js 父组件主动获取子组件的数据和方法、子组件主动获取父组件的数据和方法
    把json1赋值给json2,修改json2的属性,json1的属性也一起变化
    win10下当前目录右键添加CMD快捷方式
    element-ui
    vscode 头部注释插件
    IE浏览器new Date()带参返回NaN解决方法
    常用css
    使用DataGridView控件显示数据
    第四章 ADO.NET
  • 原文地址:https://www.cnblogs.com/wangymd/p/11011694.html
Copyright © 2011-2022 走看看