`
shuminghuang
  • 浏览: 52352 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Elasticsearch集成中文分词

阅读更多

前言

由于elasticsearch基于lucene,所以天然地就多了许多lucene上的中文分词的支持,比如 IK, Paoding, MMSEG4J等lucene中文分词原理上都能在elasticsearch上使用。当然前提是有elasticsearch的插件。 至于插件怎么开发,这里有一片文章介绍:

http://log.medcl.net/item/2011/07/diving-into-elasticsearch-3-custom-analysis-plugin/

暂时还没时间看,留在以后仔细研究, 这里只记录本人使用medcl提供的IK分词插件的集成步骤。

 

一、插件准备

网上有介绍说可以直接用plugin -install medcl/elasticsearch-analysis-ik的办法,但是我执行下来的效果只是将插件的源码下载下来,elasticsearch只是将其作为一个_site插件看待。

所以只有执行maven并将打包后的jar文件拷贝到上级目录。

(否则在定义mapping的analyzer的时候会提示找不到类的错误)。

由于IK是基于字典的分词,所以还要下载IK的字典文件,在medcl的elasticsearch-RTF中有,可以通过这个地址下载:

http://github.com/downloads/medcl/elasticsearch-analysis-ik/ik.zip

下载之后解压缩到config目录下。

 到这里,你可能需要重新启动下elasticsearch,好让下一部定义的分词器能立即生效。

 

二、分词定义

分词插件准备好之后就可以在elasticsearch里定义(声明)这个分词类型了(自带的几个类型,比如standred则不需要特别定义)。

跟其他设置一样,分词的定义也可以在系统级(elasticsearch全局范围),也可以在索引级(只在当前index内部可见)。系统级的定义当然是指在conf目录下的elasticsearch.yml文件里定义,内容大致如下:

index:  
  analysis:                     
    analyzer:        
      ikAnalyzer:  
          alias: [ik]  
          type: org.elasticsearch.index.analysis.IkAnalyzerProvider  

因为个人喜好,我并没有这么做, 而是定义在了需要使用中文分词的index中,这样定义更灵活,也不会影响其他index。

在定义analyze之前,先关闭index。其实并不需要关闭也可以生效,但是为了数据一致性考虑,还是先执行关闭。(如果是线上的系统需要三思)

 

curl -XPOST http://localhost:9400/application/_close

 (很显然,这里的application是我的一个index)

 

然后执行:

 

curl -XPUT localhost:9400/application/_settings -d '
{
  	"analysis": {
    		"analyzer":{
            	"ikAnalyzer":{
                	"type":"org.elasticsearch.index.analysis.IkAnalyzerProvider",
                    "alias":"ik"
                }
            }
    	}
}
'

 打开index:

 

curl -XPOST http://localhost:9400/application/_open

 

到此为止一个新的类型的分词器就定义好了,接下来就是要如何使用了

 

三、使用分词器

在将分词器使用到实际数据之前,可以先测验下分词效果:

http://localhost:9400/application/_analyze?analyzer=ik&text=中文分词

 分词结果是:

{
  "tokens" : [ {
    "token" : "中文",
    "start_offset" : 0,
    "end_offset" : 2,
    "type" : "CN_WORD",
    "position" : 1
  }, {
    "token" : "分词",
    "start_offset" : 2,
    "end_offset" : 4,
    "type" : "CN_WORD",
    "position" : 2
  } ]
}

 与使用standard分词器的效果更合理了:

{
  "tokens" : [ {
    "token" : "中",
    "start_offset" : 0,
    "end_offset" : 1,
    "type" : "<IDEOGRAPHIC>",
    "position" : 1
  }, {
    "token" : "文",
    "start_offset" : 1,
    "end_offset" : 2,
    "type" : "<IDEOGRAPHIC>",
    "position" : 2
  }, {
    "token" : "分",
    "start_offset" : 2,
    "end_offset" : 3,
    "type" : "<IDEOGRAPHIC>",
    "position" : 3
  }, {
    "token" : "词",
    "start_offset" : 3,
    "end_offset" : 4,
    "type" : "<IDEOGRAPHIC>",
    "position" : 4
  } ]
}

 新的分词器定义完成,工作正常后就可以在mapping的定义中引用了,比如我定义这样的type:

curl localhost:9400/application/article/_mapping -d '
{
    "article": {
        "properties": {            
            "description": {
                "type": "string",
                "indexAnalyzer":"ikAnalyzer",
                "searchAnalyzer":"ikAnalyzer"
            },
            "title": {
                "type": "string",
                "indexAnalyzer":"ik",
                "searchAnalyzer":"ik"
            }
        }
    }
}
'

 很遗憾,对于已经存在的index来说,要将一个string类型的field从standard的分词器改成别的分词器通常都是失败的:

{
    "error": "MergeMappingException[Merge failed with failures {[mapper [description] has different index_analyzer, mapper [description] has different search_analyzer]}]",
    "status": 400
}

 而且没有办法解决冲突,唯一的办法是新建一个索引,并制定mapping使用新的分词器(注意要在数据插入之前,否则会使用elasticsearch默认的分词器)

curl -XPUT localhost:9400/application/article/_mapping -d '
{
  "article" : {
    "properties" : {
	"description": {
                "type": "string",
                "indexAnalyzer":"ikAnalyzer",
                "searchAnalyzer":"ikAnalyzer"
            },
            "title": {
                "type": "string",
                "indexAnalyzer":"ik",
                "searchAnalyzer":"ik"
            }
    }
  }
}

 至此,一个带中文分词的elasticsearch就算搭建完成。 想偷懒的可以下载medcl的elasticsearch-RTF直接使用,里面需要的插件和配置基本都已经设置好。

 

 

 

4
1
分享到:
评论

相关推荐

    Elasticsearch 7.6.2(已集成ik分词器)

    Elasticsearch 7.6.2 已集成ik分词器 解压后运行bin目录下,elasticsearch.bat文件

    elasticsearch集成ik分词器详细文档

    集成IK分词器能够使Elasticsearch更好地支持中文处理,实现精准的中文分词,从而提高搜索质量和效率。IK分词器是针对Elasticsearch的中文分词插件,由Medcl开发并维护,其全称为`elasticsearch-analysis-ik`。 **一...

    基于Elasticsearch的中文分词插件.zip

    该插件将Lucene IK分词器集成到Elasticsearch中,支持自定义词典和多种分词模式。主要功能包括 支持两种分词模式iksmart(智能分词)和ikmaxword(最细粒度分词)。 支持自定义词典,包括本地词典和远程词典。 ...

    elasticsearch-7.14.0+分词器+head插件一键下载

    Elasticsearch 内置了多种分词器,如标准分词器(Standard Analyzer)、关键词分词器(Keyword Analyzer)和中文分词器(Smart Chinese Analyzer)等。这些分词器可以根据不同的语言和应用场景进行定制,以确保搜索...

    elasticsearch-analysis-ik 7.10.0 分词器

    Elasticsearch-analysis-ik 是一个专为 Elasticsearch 设计的中文分词插件,它基于 Lucene 的 IK 分词器,旨在提供高效、准确的中文分词能力。 **IK 分词器介绍** IK (Intelligent Chinese Analyzer) 是一个针对...

    ElasticSearch 重写IK分词器源码设置mysql热词更新词库1

    总结来说,通过改造IK分词器源码并集成MySQL数据库,我们可以实现动态更新热词库,从而提高Elasticsearch的分词效果,满足实时性需求。这种方式不仅解决了内置词库和静态词库的不足,还提供了更大的灵活性,能够适应...

    (源码)基于Elasticsearch和IK分词器的中文分词系统.zip

    通过集成IK分词器到Elasticsearch中,系统支持自定义词典、停用词管理以及热更新功能,适用于各种中文文本分析和搜索场景。 ## 项目的主要特性和功能 1. 自定义词典支持用户可以配置自定义词典和停用词词典,支持...

    elasticSearch(ES)最新版 ik分词插件7.10 elasticsearch-analysis-ik-7.10.0

    总的来说,"elasticsearch-analysis-ik-7.10.0"分词插件是Elasticsearch处理中文文本的关键组件,通过与Elasticsearch的集成,可以实现高效、精准的中文全文检索,提升用户体验。同时,了解和掌握相关依赖库的作用也...

    ik分词器tar包 7.10.2

    IK分词器是针对Elasticsearch(ES)的一款热门中文分词插件,其全称为“Intelligent Chinese Analyzer for Elasticsearch”。它由Java编写,旨在为中文文档提供高效、准确的分词处理。版本7.10.2是IK分词器的一个...

    elasticsearch7.17.9版本分词器插件安装包

    总的来说,这个"elasticsearch7.17.9版本分词器插件安装包"是针对中文环境的Elasticsearch实例增强搜索功能的重要工具,通过IK分词器提供高效的文本分析能力,适用于日志收集、分析等场景。正确安装和配置此插件,...

    elasticsearch ik 分词

    在Elasticsearch中集成IK分词插件,可以显著提升对中文文本的索引和搜索性能。具体而言,IK分词插件包含两个主要模式:`smart`模式和`analyzed`模式。`smart`模式下,插件会尽可能地切分出标准词汇;`analyzed`模式...

    elasticsearch-analysis-ik 7.17.16 分词器

    `elasticsearch-analysis-ik`是一个专为Elasticsearch设计的插件,它集成了Apache Lucene的IK分词器,以实现更智能、更灵活的中文分词功能。 **一、IK分词器概述** IK全称为“Intelligent Chinese Analyzer”,它...

    ElasticSearch的IK分词器包

    在构建高效的全文搜索引擎时,Elasticsearch(简称ES)是一个常用的选择,而IK分词器则是ES中针对中文处理的重要组件。本知识点将详细介绍ElasticSearch的IK分词器及其在微服务项目中的应用。 首先,Elasticsearch...

    elasticsearch2.3.1 IK分词器

    总之,Elasticsearch 2.3.1版本的IK分词器是提高中文搜索性能的关键工具,通过与Elasticsearch的集成以及依赖库的支持,能够有效地处理中文文本,提供准确的分词结果,从而提升整体的搜索体验。

    基于Elasticsearch的IK中文分词器.zip

    IK中文分词器是一个集成到Elasticsearch中的中文分词插件,支持自定义词典和多种分词模式。该插件基于Lucene IK分词器,提供了细粒度和智能分词两种模式,适用于中文文本的搜索和分析。 项目的主要特性和功能 1. ...

    适用于elasticsearch7.12.1版本

    在 Elasticsearch 7.12.1 版本中,Ik 分词器可能已经集成在默认的分词器列表中,用户可以直接使用。同时,由于 Ik 分词器持续更新以兼容 Elasticsearch 的新版本,因此在 7.12.1 版本下使用 Ik,可以确保最佳的性能...

    elasticsearch-analysis-ik-5.6.8 ik分词器插件

    首先,"elasticsearch-analysis-ik"是专为Elasticsearch设计的中文分词器,它能够有效地对中文文本进行分词,提高中文搜索的准确性和效率。5.6.8版本是该插件的一个稳定版本,与Elasticsearch 5.6.x系列兼容,确保了...

Global site tag (gtag.js) - Google Analytics