elasticsearch 拼音+ik分詞,spring data elasticsearch 拼音分詞


elasticsearch 自定義分詞器

安裝拼音分詞器、ik分詞器

  拼音分詞器: https://github.com/medcl/elasticsearch-analysis-pinyin/releases

  ik分詞器:https://github.com/medcl/elasticsearch-analysis-ik/releases

  下載源碼需要使用maven打包

  下載構建好的壓縮包解壓后放直接在elasticsearch安裝目錄下 plugins文件夾下,可以重命名

 

 

1.在es中設置分詞

創建索引,添加setting屬性

PUT myindex
{
  "settings": {
    "index":{
      "analysis":{
        "analyzer":{
          "ik_pinyin_analyzer":{
            "type":"custom",
            "tokenizer":"ik_smart",
            "filter":"pinyin_filter"
          }
        },
        "filter":{
          "pinyin_filter":{
            "type":"pinyin",
            "keep_separate_first_letter" : false,                
       "keep_full_pinyin" : true,
       "keep_original" : false,
"limit_first_letter_length" : 10,
"lowercase" : true,
"remove_duplicated_term" : true } } } } } }

添加屬性 設置mapping屬性

PUT myindex/_mapping/users
{
  "properties": {
    "uname":{
      "type": "text",
      "analyzer": "ik_smart",
      "search_analyzer": "ik_smart",
      "fields": {
        "my_pinyin":{
          "type": "text"
          , "analyzer": "ik_pinyin_analyzer",
          "search_analyzer": "ik_pinyin_analyzer"
        }
      }
    },
    "age":{
      "type": "integer"
    }
  }
}

2.spring data elasticsearch設置分詞

創建實體類

@Mapping(mappingPath = "elasticsearch_mapping.json")//設置mapping
@Setting(settingPath = "elasticsearch_setting.json")//設置setting
@Document(indexName = "myindex",type = "users")
public class User {
@Id
private Integer id;
//
// @Field(type =FieldType.keyword ,analyzer = "pinyin_analyzer",searchAnalyzer = "pinyin_analyzer")//沒有作用
private String name1;
@Field(type = FieldType.keyword)
private String userName;
@Field(type = FieldType.Nested)
private List<Product> products;

}
在resources下創建elasticsearch_mapping.json 文件
{
  "properties": {
    "uname": {
      "type": "text",
      "analyzer": "ik_smart",
      "search_analyzer": "ik_smart",
      "fields": {
        "my_pinyin": {
          "type": "text",
          "analyzer": "ik_pinyin_analyzer",
          "search_analyzer": "ik_pinyin_analyzer"
        }
      }
    },
    "age": {
      "type": "integer"
    }
  }
}
在resources下創建elasticsearch_setting.json 文件
 
         
{
"index": {
"analysis": {
"analyzer": {
"ik_pinyin_analyzer": {
"type": "custom",
"tokenizer": "ik_smart",
"filter": "pinyin_filter"
}
},
"filter": {
"pinyin_filter": {
"type": "pinyin",
//true:支持首字母
"keep_first_letter":true,
//false:不支持首字母分隔
"keep_separate_first_letter": false,
//true:支持全拼
"keep_full_pinyin": true,
"keep_original": false,
//設置最大長度
"limit_first_letter_length": 10,
//小寫非中文字母
"lowercase": true,
//重復的項將被刪除
"remove_duplicated_term": true
}
}
}
}
}
 
  • ik_max_word:會將文本做最細粒度的拆分,例如「中華人民共和國國歌」會被拆分為「中華人民共和國、中華人民、中華、華人、人民共和國、人民、人、民、共和國、共和、和、國國、國歌」,會窮盡各種可能的組合;
  • ik_smart:會將文本做最粗粒度的拆分,例如「中華人民共和國國歌」會被拆分為「中華人民共和國、國歌」;

程序啟動后分詞並沒有設置分詞

實體創建后需要加上,創建的索引才可以分詞

elasticsearchTemplate.putMapping(User.class);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM