身安不如心安,屋宽不如心宽 。

都使用一个ik分词器的情况下,想要对不同索引定义不同停用词词典如何做?

Elasticsearch | 作者 esLitteBane | 发布于2020年07月09日 | 阅读数:4199

现在有两个索引,都想用IK的分词器,但是两个索引停用词词库不同,而且有的字段不想使用停用词,如何实现?
 
PUT stopword_test
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_ik_analyzer": {
          "type": "custom",
          "tokenizer": "ik_smart"
        }
      }
    }
  }, 
  "mappings": {
    "properties" : {
      "wordtext" : {
        "type" : "text",
        "analyzer": "my_ik_analyzer",
        "fielddata": true
      }
    }
  
    
  }
}
已邀请:

FFFrp

赞同来自:

定义两个分词器,使用两个不同的token filter, 官网的这个Stop Token Filter试试
 

libinjale2008

赞同来自:

楼主,解决了吗,有比较好的办法吗?

spoofer

赞同来自:

你可以定义不同的分词器,各个字段使用自己的分词器即可。
PUT my-index-001
{
"settings": {
"analysis": {
"char_filter": { # 自定义char_filter
"and_char_filter": {
"type": "mapping",
"mappings": ["& => and"] # 将 '&' 转换为 'and'
}
},
"filter": { # 自定义 filter
"an_stop_filter": {
"type": "stop",
"stopwords": ["an"] # 设置 "an" 为停用词
}
},
"analyzer": { # 自定义分词器为 custom_analyzer
"custom_analyzer": {
"type": "custom",
# 使用内置的html标签过滤和自定义的my_char_filter
"char_filter": ["html_strip", "and_char_filter"],
"tokenizer": "standard",
# 使用内置的lowercase filter和自定义的my_filter
"filter": ["lowercase", "an_stop_filter"]
}
}
}
}
}


感兴趣的话欢迎订阅我的小册:https://juejin.cn/book/7054754754529853475

要回复问题请先登录注册