一、创建mapping​​映射之前索引必须存在

JestResult execute = jestClient.execute(new CreateIndex.Builder(indexName.toLowerCase()).build());

二、创建mapping映射

Boolean mapping = createMapping(indexName);
// 帖子的映射
            if (ElasticIndexEnum.BEAUTY_LOG.getValue().equals(indexName)) {
                String source = "{\"" + ElasticIndexTypeEnum.BEAUTY_LOG_INDEX_TYPE.getValue() + "\":{\"properties\":{"
                        + "\"title\":{\"type\":\"text\", \"index\":\"true\", \"analyzer\":\"ik_max_word\", \"search_analyzer\":\"ik_smart\", \"boost\":\"8\"}"
                        + ",\"describe\":{\"type\":\"text\", \"index\":\"true\", \"analyzer\":\"ik_max_word\", \"search_analyzer\":\"ik_smart\", \"boost\":\"2\"}"
                        + ",\"content\":{\"type\":\"text\", \"index\":\"true\", \"analyzer\":\"ik_max_word\", \"search_analyzer\":\"ik_smart\", \"boost\":\"7\"}"
                        + ",\"memberName\":{\"type\":\"text\", \"index\":\"true\", \"analyzer\":\"ik_max_word\", \"search_analyzer\":\"ik_smart\", \"boost\":\"7\"}"
                        + ",\"address\":{\"type\":\"text\", \"index\":\"true\", \"analyzer\":\"ik_max_word\", \"search_analyzer\":\"ik_smart\", \"boost\":\"3\"}"
                        + ",\"position\":{\"type\":\"geo_point\"}"
                        + ",\"longitude\":{\"type\":\"double\"}"
                        + ",\"latitude\":{\"type\":\"double\"}"
                        + ",\"challengeTitle\":{\"type\":\"text\", \"index\":\"true\", \"analyzer\":\"ik_max_word\", \"search_analyzer\":\"ik_smart\", \"boost\":\"4\"}"
                        + ",\"challengeIntroduce\":{\"type\":\"text\", \"index\":\"true\", \"analyzer\":\"ik_max_word\",\"search_analyzer\":\"ik_smart\", \"boost\":\"4\"}"
                        + "}}}";

                System.out.println(source);
                JsonObject asJsonObject = new JsonParser().parse(source).getAsJsonObject();
                PutMapping putMapping = new PutMapping.Builder(indexName.toLowerCase(), ElasticIndexTypeEnum.BEAUTY_LOG_INDEX_TYPE.getValue(), asJsonObject).build();
                JestResult jestResult = jestClient.execute(putMapping);
                if (!jestResult.isSucceeded()) {
                    System.out.println("创建索引indexName:" + indexName + "的映射mapping" + source +"失败!!!");
                    System.out.println("失败信息描述:" + jestResult.getErrorMessage());
                    return Boolean.FALSE;
                }

三、创建映射名词解释

1、type

Elasticsearch的type支持很多种java的类型,老版本中字符串对应的类型是string,在6.x版本中使用text取代string地理位置的类型是geo_point,它支持数组类型,字符串类型等,其中,有一点需要注意的是,如果使用字符串类型的话,经度需要放在后面位置,纬度在前面,而使用数组则位置恰好相反。至于,其他的映射类型,暂时还没有发现需要注意事项,这里不再赘述,感兴趣的朋友可以自己去搜索,有什么发现,欢迎补充。

2、index

ElasticSearch6.x版本的index是一个Boolen类型,意思是设置该字段是否作为索引存储,默认设置的true

3、analyzer和search_analyzer

analyzer设置该字段在存储到搜索引擎时候,是否分词,在此之前需要先安装分词器,我使用的是IK分词器,IK分词器默认支持ik_smart(粗粒度分词)、ik_max_word(细粒度分词),一般选择是在建立映射的时候设置ik_max_word分词,这样就会将该字段最大限度的分词,可以扩大搜索范围;search_analyzer是搜索分词,意思就是对搜索的词语进行分词,这里推荐使用ik_smart,可以粗粒度分词,尽可能的将搜索的词条拆分成词语,可以提高搜索的效率和命中率。

4、boost

boost可以设置该字段的搜索权重,顾名思义就是在搜索的时候,那些字段会被优先搜索

至于其他的设置,本例中使用较少,就不在赘述,感兴趣的朋友可以自己网上查询,欢迎补充!

Last modification:January 22, 2021
如果觉得我的文章对你有用,请随意赞赏