zoukankan      html  css  js  c++  java
  • Elasticsearch1.x 和Elasticsearch2.x 拼音分词插件lc-pinyin安装教程

    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来设置一个搜索期分词器,如下面圈红的地方:

  • 相关阅读:
    Android UI 之实现多级列表TreeView
    python小游戏实现代码
    【iOS知识学习】_UITableView简介
    根据指定电话号码得到通讯录上的姓名
    【转载】公钥、私钥、数字签名等知识
    常见的哈希Hash算法 & MD5 & 对称非对称加密 & 海明码
    Mac电脑解压文件unrar用密码问题解决
    一道题目- Find the smallest range that includes at least one number from each of the k lists
    求逆序对数总结 & 归并排序
    【转载】非常棒的算法面试类资源汇总
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/9077550.html
Copyright © 2011-2022 走看看