相信大家在开发博客,在线商城的时候会涉及到搜索功能。而近几年火起来的 ElasticSearch(ES)凭借其稳定、可靠、快速的实时搜索普遍受到大家的好评,连 Github、SoundCloud 也都将 ES 作为其核心搜索组件。

但是 ES 本身对中文分词和搜索比较局限。因为内置的分析器在处理中文分词时,只有两种方式:一种是单字(unigrams)形式,即简单粗暴的将中文的每一个汉字作为一个词(token)分开;另一种是两字(bigrams)的,也就是任意相邻的两个汉字作为一个词分开。这两种方式都不能很好的满足现在的中文分词需求,进而影响了搜索结果

举个例子:
假设我们的 index 里面存储了3篇 documents 如下:

id content
1 美称中国武器商很神秘 花巨资海外参展却一言不发
2 在第一界国际锦标赛中 国家代表李雷勇夺冠军
3 国武公司近日上市
  • Case 1:查询“中国”,期望只得到 id 为1的 document。

用 unigram 的分析器(即默认的 Standard Analyzer)查询结果为 id 1和 id 2的content;bigram 的分析器(名为cjk)的结果为id 1。Standard Analyzer 没有给出预期结果是因为它把“中国”切分为“中”、“国”2个 token,因此误给出了 id 2的结果。

  • Case 2:查询“国武”这一家公司,期望只得到 id 为3的 document。

Standard Analyzer 和 cjk 的查询结果都会同时给出 id 1和 id 3的 document,但是 id 1 的 document 中的“国武”并不是所指的公司。

(注:以上查询均用query_string)

因此我们可以发现内置的分析器有它的局限性,并不能满足复杂或者特定的搜索需求。为此,玻森数据开发了一款基于玻森中文分词的 ES 插件(Elasticsearch-Analysis-BosonNLP),方便大家对中文数据进行更精确的搜索。

现在已有一些成熟的 ES 中文分词插件,但在分词引擎准确率上,相信 BosonNLP 的中文分词能满足大家不同领域上多样化的需求。有兴趣的朋友可以查看11款开放中文分词引擎大比拼。

接下来,3分钟教会大家如何安装使用玻森 ES 中文分词插件 Beta 版(以 ES 2.2.0 版本为例):

  • 安装

只需如下一个命令。

$ sudo bin/plugin install https://github.com/bosondata/elasticsearch-analysis-bosonnlp/releases/download/1.3.0-beta/elasticsearch-analysis-bosonnlp-1.3.0-beta.zip

注:对于其他不同版本的 ES,只需要在命令里更换对应的插件版本号即可。

  • 使用

需要在elasticsearch.yml文件中的 analyzer 里配置好玻森 bosonnlp analyzer(需要配置 API_TOKEN 以及分词的参数)。详情解释请查看 Github 上的README。

bosonnlp:type: bosonnlpAPI_URL: http://api.bosonnlp.com/tag/analysisAPI_TOKEN: *PUT YOUR API TOKEN HERE*

完成以上步骤之后便可以使用玻森 ES 分词插件了。

对比之前 Case 2 的查询: 查询“国武”这一家公司,期望只得到 id 为3的 document。玻森ES分词插件搜索结果:

{"took" : 70,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"failed" : 0},"hits" : {"total" : 1,"max_score" : 0.15342641,"hits" : [ {"_index" : "bosonnlp_test","_type" : "text","_id" : "3","_score" : 0.15342641,"_source":
{"content":"国武公司近日上市"
}} ]}
}

当然,如果对分词有特定需求的小伙伴可以在配置里修改对应的参数。目前,玻森数据对于中文分词提供了繁简转换、新词发现等功能,能满足不同领域的搜索需求。

希望这款插件能提升你的工作效率!

GitHub上有具体的说明。这里附上例子中索引 document 的 bash 文件以方便测试。

一行命令让ElasticSearch支持中文分词搜索相关推荐

  1. Laravel5.4中文分词搜索-使用 Laravel Scout,Elasticsearch,ik 分词(三)

    上一篇地址:https://blog.csdn.net/huangfenhu/article/details/94009241 创建一个文章表和文章模型: php artisan make:model ...

  2. ElasticSearch:为中文分词器增加对英文的支持(让中文分词器可以处理中英文混合文档)(转)

    本文地址,需转载请注明出处: http://blog.csdn.net/hereiskxm/article/details/47441911 当我们使用中文分词器的时候,其实也希望它能够支持对于英文的 ...

  3. Laravel5.4中文分词搜索-使用 Laravel Scout,Elasticsearch,ik 分词(一)

    elasticsearch需要的环境搭建 简介: 使用elasticsearch的前提是你的主机必须安装了java的JDK,而且版本必须是1.8以上,并设置JAVA_HOME环境变量 java的jdk ...

  4. 【Elasticsearch】Elasticsearch analyzer 中文 分词器

    1.概述 转载: https://blog.csdn.net/tzs_1041218129/article/details/77887767 分词器首先看文章:[Elasticsearch]Elast ...

  5. 为Elasticsearch添加中文分词

    Elasticsearch的中文分词很烂,所以我们需要安装ik.首先从github上下载项目,解压: cd /tmp wget https://github.com/medcl/elasticsear ...

  6. Elasticsearch之中文分词器插件es-ik(博主推荐)

    前提 什么是倒排索引? Elasticsearch之分词器的作用 Elasticsearch之分词器的工作流程 Elasticsearch之停用词 Elasticsearch之中文分词器 Elasti ...

  7. Lucene支持中文分词代码实现

    支持中文分词 分析器(Analyzer)的执行过程 如下图是语汇单元的生成过程: 从一个Reader字符流开始,创建一个基于Reader的Tokenizer分词器,经过三个TokenFilter生成语 ...

  8. ElasticSearch的中文分词

    一ElasticSearch安装中文分词器 1.1 gitclone https://github.com/medcl/elasticsearch-analysis-ik 1.2 gitcheckou ...

  9. Clucene实现中文分词搜索(转载)

    最近,一阵忙乎,终于在Clucene(版本0.9.16)中实现了中文分词搜索. 一些需要改动的地方如下:                     一. 把项目设置为Use Unicode Charac ...

最新文章

  1. docker网络配置方法总结
  2. 注销linux/solaris桌面的命令
  3. 【模拟】Codeforces 710C Magic Odd Square
  4. JVM基于栈的解释器执行原理
  5. Linux的Apache报错(20014)Internal error: Error retrieving pid file logs/httpd.pid
  6. 聊聊JVM(五)从JVM角度理解线程
  7. [开源]基于姿态估计的运动计数APP开发(一)
  8. ssh(Spring+Spring mvc+hibernate)简单增删改查案例
  9. 【Python CheckiO 题解】Bird Language
  10. 联想90W快充是假的吗?官方回应:我们不玩文字游戏
  11. 图标代码_通过两行代码即可调整苹果电脑 Launchpad 图标大小!
  12. IBM Mainframe 基础知识学习 (EBCDIC,dsp3270)
  13. JAVA的反射机制原理
  14. 2021-03-26,拉胯的三条命令,HappyCTFd
  15. 如何提高自身数学分析水平
  16. 【必应】Bing自动提交收录python脚本
  17. camera tuning名词缩写
  18. [经典之作]vml经典之作
  19. 中科呐喊WiFi热点广告机APP使用教程(安卓)
  20. Uncaught ReferenceError: Cannot access ‘f1‘ before initialization

热门文章

  1. linux chrome 管理员,Linux下google chrome浏览器flash无法启用的解决
  2. python中常见的内置函数_Python常用内置函数总结
  3. loading动画_超干货 CSS3/SVG Loading动画集合
  4. android+5.0+小米手环,小米手环5和荣耀手环6哪个好-参数对比
  5. php任意文件删除漏洞,phpshe后台任意文件删除漏洞及getshell | CN-SEC 中文网
  6. php 引用foot.html,htmltfoot标签怎么用
  7. oracle实现主键自动增长
  8. 厦门理工学院2019年数据结构与算法考研初试大纲
  9. 大妈也能看懂的大数据分布式计算
  10. 重磅:JDK11正式发布!史上最全所有特性完整解读!