Elasticsearch1.x 基于lc-pinyin和ik分词实现 中文、拼音、同义词搜索

https://blog.csdn.net/chennanymy/article/category/6056806

Elasticsearch1.x 拼音分词实现全拼首字母中文混合搜索

https://blog.csdn.net/chennanymy/article/details/52336368

一、插件简介

elasticsearch-analysis-lc-pinyin是一款elasticsearch拼音分词插件,可以支持按照全拼、首字母,中文混合搜索。

首先举个栗子说明下,我们在淘宝搜索框中输入“jianpan” 可以搜索到关键字包含“键盘”的商品。不仅仅输入全拼,有时候我们输入首字母、拼音和首字母、中文和首字母的混合输入,比如:“键pan”、“j盘”、“jianp”、“jpan”、“jianp”、“jp” 等等,都应该匹配到键盘。通过elasticsearch-analysis-lc-pinyin这个插件就能做到类似的搜索

二、安装插件

elasticsearch-analysis-lc-pinyin一共有两个版本分别是1.4.5和2.2.2,和es的版本对应

1.4.5 这个版本对应ES1.X

2.2.2这个版本对应ES2.X

请根据需要安装对应的版本,下面地址中压缩包已经包含了这两个版本

es2.x的安装请参考:http://blog.csdn.net/chennanymy/article/details/52744154

下载地址:http://download.csdn.net/detail/chennanymy/9614699

当然也可以自己下载elasticsearch-analysis-lc-pinyin的源码自己maven build出来,这样可以避免版本冲突

git 地址:http://git.oschina.net/music_code_m/elasticsearch-analysis-lc-pinyin

如下,我已将下载下来的包放在 /home/chennan/soft 目录下,下面我将以elasticsearch1.4.5为例安装elasticsearch-analysis-lc-pinyin-1.4.5拼音分词器

进入到es的plugins目录,下面是未安装时的样子

接着打开终端命令行执行如下命令安装插件

[java] view plain copy

./../bin/plugin --install analysis-lc-pinyin --url file:/home/chennan/soft/elasticsearch-analysis-lc-pinyin-1.4.5.zip

粗线上面结果就表示安装成功了 ^ ^,安装完成后会在plugins目录下生成一个 analysis-lc-pinyin的目录,如下

接下来配置elasticsearch.yml,在末尾加上如下配置,如下因为我也安装了IK分词器所以配置这样,如果你没有安装IK可以将下面ik的部分删除

[java] view plain copy

index:

analysis:

analyzer:

ik:

alias: [ik_analyzer]

type: org.elasticsearch.index.analysis.IkAnalyzerProvider

ik_max_word:

type: ik

use_smart: false

ik_smart:

type: ik

use_smart: true

lc:

alias: [lc_analyzer]

type: org.elasticsearch.index.analysis.LcPinyinAnalyzerProvider

lc_index:

type: lc

analysisMode: index

lc_search:

type: lc

analysisMode: search

然后启动es,这里我启动两个节点。从启动日志中可以看到es成功加载了拼音插件,如下

到这里,插件就安装完成了。我们可以通过一个简单的curl命令来测试分词器时候正常工作

[java] view plain copy

curl -XGET '192.168.0.107:9200/_analyze?analyzer=lc_search&pretty' -d 'dafeiji'

输入“dafeiji”可以切分出来“da”、“fei”、“ji” 证明一切都OK啦

接下来就来试试借助这个拼音分词器来执行搜索,看看效果

1、首先建立一个索引 ,然后执行putmapping , 这里的索引名叫index,type叫fulltext,其中content这个字段采用拼音分词。注意这里用到两个不同的分词器

索引过程采用:lc_index分词器

搜索过程采用:lc_search分词器

[java] view plain copy

curl -XPUT http://localhost:9200/index

curl -XPOST http://localhost:9200/index/fulltext/_mapping -d'

{

"fulltext": {

"_all": {

"index_analyzer": "lc_index",

"search_analyzer": "lc_search",

"term_vector": "no",

"store": "false"

},

"properties": {

"content": {

"type": "string",

"store": "no",

"term_vector": "with_positions_offsets",

"index_analyzer": "lc_index",

"search_analyzer": "lc_search",

"include_in_all": "true",

"boost": 8

}

}

}

}'

然后索引几条数据,这里索引的4个公司的名称,陆金所、阿里巴巴、腾讯、百度、如下:

接下来执行几个搜索,查询的DSL像这样

[java] view plain copy

{

"query": {

"match": {

"content": {

"query": "bai度",

"analyzer": "lc_search",

"type": "phrase"

}

}

},

"highlight": {

"pre_tags": [

""

],

"post_tags": [

""

],

"fields": {

"content": {}

}

}

}

搜索“bai度”

搜索“阿li巴b”

搜索“ljs”

搜索“alibb”

搜索“lujinsuo”

下面使用es 客户端来做查询

[java] view plain copy

@Test

public void testPinyinSearch() {

final String index = "index";

final String type = "fulltext";

SearchRequestBuilder requestBuilder = elasticIndexOperateHelper.getClient().prepareSearch(index).setTypes(type);

    QueryBuilder pinyinSearch = QueryBuilders
.matchQuery("content", "lu金s")
.type(MatchQueryBuilder.Type.PHRASE)
.analyzer("lc_search")
.zeroTermsQuery(MatchQueryBuilder.ZeroTermsQuery.NONE); SearchResponse response = requestBuilder
.setQuery(pinyinSearch)
.setHighlighterPreTags("</tag1>")
.setHighlighterPostTags("<tag1>")
.addHighlightedField("content")
.execute().actionGet();
System.out.println(response); }

查询结果如下:

Elasticsearch2.x 拼音分词插件lc-pinyin安装教程

https://blog.csdn.net/chennanymy/article/details/52744154

关于lc-pinyin的具体使用这里就不做介绍了,使用方式请参考:《Elasticsearch1.x 拼音分词实现全拼首字母中文混合搜索》

由于该插件在ES1.x和ES2.x下的安装和使用有些不同,所以在这里需要针对2.x单独说明下。

一、安装

首先通过git下载lc-pinyin的源码,并切换到2.2.2这个分支:

[java] view plain copy

git clone git@git.oschina.net:music_code_m/elasticsearch-analysis-lc-pinyin.git

cd elasticsearch-analysis-lc-pinyin/

git checkout dev_2.2.2

接下来打开项目的pom.xml文件修改elasticsearch.version为你对应的es版本,这里以2.3.0为例

修改后,重新打包:

[java] view plain copy

mvn clean package

打包后的zip文件在这个路径:elasticsearch-analysis-lc-pinyin/target/releases/elasticsearch-analysis-lc-pinyin-2.2.2.zip

接下来将该文件拷贝到服务器上,用安装命令安装:

[java] view plain copy

./bin/plugin install file:../elasticsearch-plugins/elasticsearch-analysis-lc-pinyin-2.2.2.zip

二、使用

因为在ES2.x中mapping设置分词器的方式有所改变。

在1.x中我们通过index_analyzer和search_analyzer来设置索引期和搜索期的分词器。

在2.x中我们只能通过analyzer来设置一个全局分词器,search_analyzer来设置一个搜索期分词器,如下面圈红的地方:

Elasticsearch1.x 和Elasticsearch2.x 拼音分词插件lc-pinyin安装教程的更多相关文章

  1. ElasticSearch(三) ElasticSearch中文分词插件IK的安装

    正因为Elasticsearch 内置的分词器对中文不友好,会把中文分成单个字来进行全文检索,所以我们需要借助中文分词插件来解决这个问题. 一.安装maven管理工具 Elasticsearch 要使 ...

  2. 中文分词工具简介与安装教程(jieba、nlpir、hanlp、pkuseg、foolnltk、snownlp、thulac)

    2.1 jieba 2.1.1 jieba简介 Jieba中文含义结巴,jieba库是目前做的最好的python分词组件.首先它的安装十分便捷,只需要使用pip安装:其次,它不需要另外下载其它的数据包 ...

  3. solr 中文分词器IKAnalyzer和拼音分词器pinyin

    solr分词过程: Solr Admin中,选择Analysis,在FieldType中,选择text_en 左边框输入 “冬天到了天气冷了小明不想上学去了”,点击右边的按钮,发现对每个字都进行分词. ...

  4. ElasticSearch 中文分词插件ik 的使用

    下载 IK 的版本要与 Elasticsearch 的版本一致,因此下载 7.1.0 版本. 安装 1.中文分词插件下载地址:https://github.com/medcl/elasticsearc ...

  5. Elasticsearch拼音分词和IK分词的安装及使用

    一.Es插件配置及下载 1.IK分词器的下载安装 关于IK分词器的介绍不再多少,一言以蔽之,IK分词是目前使用非常广泛分词效果比较好的中文分词器.做ES开发的,中文分词十有八九使用的都是IK分词器. ...

  6. 和我一起打造个简单搜索之IK分词以及拼音分词

    elasticsearch 官方默认的分词插件,对中文分词效果不理想,它是把中文词语分成了一个一个的汉字.所以我们引入 es 插件 es-ik.同时为了提升用户体验,引入 es-pinyin 插件.本 ...

  7. es 修改拼音分词器源码实现汉字/拼音/简拼混合搜索时同音字不匹配

    [版权声明]:本文章由danvid发布于http://danvid.cnblogs.com/,如需转载或部分使用请注明出处 在业务中经常会用到拼音匹配查询,大家都会用到拼音分词器,但是拼音分词器匹配的 ...

  8. elasticsearch安装分词插件

    在常用的中文分词器.拼音分词器.繁简体转换插件.国内用的就多的分别是:elasticsearch-analysis-ikelasticsearch-analysis-pinyinelasticsear ...

  9. 【杂记】docker搭建ELK 集群6.4.0版本 + elasticsearch-head IK分词器与拼音分词器整合

    大佬博客地址:https://blog.csdn.net/supermao1013/article/category/8269552 docker elasticsearch 集群启动命令 docke ...

随机推荐

  1. java程序员所必须掌握的内容

    以下内容有待细化,并用于考察员工的水平! 从低的往高级的说. 初级 1.掌握java语法 oop+io+网络 2.基本的数据结构 3.基本的算法-例如排序,合并 4.基本的几个javaee框架 spr ...

  2. oracle的事务隔离级别和读一致性

    oracle提供了三个隔离级别: 1.读提交 ,简而言之只能读取语句开始执行前提交的数据 2.串行,这个好理解,就是事务串行运行,避免经典的三个场景-脏读.不可重复读.幻读. 3.只读,oracle已 ...

  3. vue入门——组件基础todolist

    1. 以下是 todolist 的例子,没有用到组件:下面的3 会通过组件拆分todolist <!DOCTYPE html> <html lang="en"&g ...

  4. discuzX3.2 X3.4网站漏洞修复 SQL注入与请求伪造攻击利用与修复

    2018年12月9日,国内某安全组织,对discuz X3.2 X3.4版本的漏洞进行了公开,这次漏洞影响范围较大,具体漏洞是discuz 的用户前段SQL注入与请求伪造漏洞,也俗称SSRF漏洞,漏洞 ...

  5. css常用样式属性详细介绍

    对于初学css的来说,肯定会觉得这么多样式不好记,而且记住了也容易忘,其实刚开始我们不用去记这么多的样式,确实是记了也会忘,刚开始只需记住一些常用的就可以了,然后在慢慢的使用过程当中接触并学习一些高级 ...

  6. 002---Linux系统目录结构

    Linux系统目录结构 一切从根(/)开始,一切皆文件. /bin:存放常用的可执行文件 /sbin:存放常用的可执行文件 家目录:存放用户自己的文件或目录 root用户:/root 普通用户:/ho ...

  7. (数据科学学习手札25)sklearn中的特征选择相关功能

    一.简介 在现实的机器学习任务中,自变量往往数量众多,且类型可能由连续型(continuou)和离散型(discrete)混杂组成,因此出于节约计算成本.精简模型.增强模型的泛化性能等角度考虑,我们常 ...

  8. python2.7练习小例子(二十三)

        23):题目:求1+2!+3!+...+20!的和.     程序分析:此程序只是把累加变成了累乘. #!/usr/bin/python # -*- coding: UTF-8 -*- n = ...

  9. 加载旋转框(loading spinner)

    目标是这样的 用到的组件 AlertDialog 和 ProgressBar 先创建一个 AlertDialog 的布局 <?xml version="1.0" encodi ...

  10. L008之前课程实战模拟。

    L008之前课程实战模拟. . 安装CentOS 6.5 X86_64 . 配置网络 . 用CRT连接服务器 . 更换源http://mirrors.163.com/.help/CentOS6-Bas ...