天天看点

elasticsearch索引从ik中文分词器拓展到使用逗号“,”分词

问题描述:

        有一个ES实体为,文章标签tags,以字符串形式储存,如“上海,民宿,迪士尼,happy”为一条数据。在实现文章标签搜索排序(使用elasticsearch2.4.4+springbootdata+jpa)时,遇到问题,显示的标签  汉字部分被分词成了一个字一个字,英文还是一个单词。

        因此寻找方法改变分词方法,有两种办法,第一种,使用中文分词器插件,使它分词起来更加友好,大部分词语能够正常被分词,但是一些不常用的词语,还是被分成了一个字一个字,比如“民宿”,被分词成了“民宿”、“民”、“宿”,这是不合理的,也不符合我们实际应用。因此,跟据人的使用的习惯,按照用户,主动划分的结果,作为分词结果,其实就是第二种,按照逗号分词,不要有其他操作。

一、用ik分词器分词

两种方法:

方法1:推荐方法

1、在springboot工程中建立实体类索引时,通过@Mapping注解,来自定义生成mapping。建立实体类时在@Document注解下面加入以下代码

@Mapping(mappingPath = "articlesearch_mapping.json")
           

结果如下图 :

elasticsearch索引从ik中文分词器拓展到使用逗号“,”分词

2、在resources目录下,新建articlesearch_mapping.json

内容如下:设置tags标签分词和查找方法用 ik_smart 

{
  "blog": {
    "properties": {
      "tags": {
        "type": "string",
        "analyzer": "ik_smart",
        "search_analyzer": "smart"
        }
      }

    }
  }

           

3、重新运行,在es-head中,查看索引信息,发现已经设置成功。显示了我们上述json文件中的内容。

方法2:

为了避免,每次建立实体就要加@Mapping注解,也可以用设置es索引模板的方法。但是这对于每次都会清es data的我就不是很方便了,每次都要新建模板,就很麻烦,所以我没有采用,但是效果是一样的。

postman(模拟器)中输入语句 (_template是新建模板操作,template1自己起的模板名字)

PUT http://localhost:9200/_template/template1

{
    "template": "bl*",
    "settings": {
        "number_of_shards": 1
    },
    "mappings": {
        "type1": {
            "_source": {
                "enabled": false
            },
            "properties": {
                "tags": {
                     "type": "string",
                     "analyzer": "ik_smart",
                     "search_analyzer": "ik_smart"
                }
            }
        }
    }
}
           

   说明:  (1)模板template_1匹配所有的以bl开头的索引。也可设置别的名字开头,如te*

      (2)索引模板是template_1,索引是bl*。

                      (3)创建模版后 tags字段有效

二、 按照逗号分词

非常类似上面ik分词器的法1

1、在springboot工程中建立实体类索引时,通过@Setting和@Mapping 注解,来自定义设置setting 和 mapping。建立实体类时在@Document注解下面加入以下代码

@Setting(settingPath ="articlesearch_mapping2.json" )
@Mapping(mappingPath = "articlesearch_mapping.json")
           

结果如下:

elasticsearch索引从ik中文分词器拓展到使用逗号“,”分词

 2、在resources目录下,新建articlesearch_mapping2.json

内容如下:新建一个分词方法,名称为comma,使用逗号分词

{
        "analysis": {
            "analyzer": {
                "comma": {
                     "type": "pattern",
                     "pattern":","
                    }
                }
            }
}
           

3、在resources目录下,新建articlesearch_mapping.json

  内容如下:设置tags标签分词和查找方法用 新建的 comma方法

{
  "blog": {
    "properties": {
      "tags": {
        "type": "string",
        "analyzer": "comma",
        "search_analyzer": "comma"
        }
      }

    }
  }

           
elasticsearch索引从ik中文分词器拓展到使用逗号“,”分词

参考:

https://my.oschina.net/apdplat/blog/628889

如有不对的地方,望大神指正。

继续阅读