zoukankan      html  css  js  c++  java
  • Elasticsearch 分词插件的使用

    IK:

    1 下载ik源代码  https://github.com/medcl/elasticsearch-analysis-ik

    2 解压源代码包

    3 在源代码目录 执行 mvn clean  清理

    4 mvn compile 编译,产生一个target文件夹存储生成linux可识别的应用程序源文件(类似于vs生成bin下的文件),

    5 mvn package 执行打包命令,产生可执行的jar包

    6 找到target/release目录

    7 复制并解压elasticsearch-analysis-ik-1.9.3.zip 到 es的plugins/ik目录

    例如:unzip /es/elasticsearch-analysis-ik/target/releases/elasticsearch-analysis-ik-1.9.3.zip  -d  /es/elasticsearch-2.3.3/plugins/ik 

    8  elasticsearch.yml 末尾加上

    index.analysis.analyzer.ik.type : "ik"

    9 设置默认分词器为ik

    index.analysis.analyzer.default.type:ik

    9 指定映射时:

    {
    "settings" : {
            "analysis" : {
                "analyzer" : {
                    "ik" : {
                        "tokenizer" : "ik"
                    }
                }
            }
        },
        "mappings": {
            "logweb": {
                "properties": {
                    "firstname": {
                        "type":   "string",
                        "index":  "analyzed",
                        "analyzer" : "ik"
                    },"lastname": {
                        "type":   "string",
                        "index":  "analyzed"
                    },"gender": {
                        "type":   "boolean",
                        "index":  "not_analyzed"
                    },"price": {
                        "type":   "float",
                        "index":  "not_analyzed"
                    },"createTime": {
                        "type":   "date",
                        "index":  "not_analyzed"
                    }
                }
            
            }
        }
    }
    

      

    此时执行搜索:

    未设置ik分词,默认使用标准分析器的搜索结果:

    使用了ik分词的搜索结果:

     分析:

    1使用标准分析器是一元分词,会把汉字拆成一个一个的字作为索引的最小存储单元在term里,所以当你执行term查询时,只能搜索单个字才能匹配上数据

    2使用了ik分词器以后,他会把“ 意大利 圣碧涛天然矿泉水(含汽) 1.5L” 拆成 意大利/圣/碧/泉/天然/矿泉水/矿/泉水/水/含/汽/1.5l/1.5/l  ,此时你搜所“天然” 是能找到数据的,但是你搜所“天”使找不到数据的。因为“天”并没有拆成一个结果单元。

    测试分词:

    在浏览器中:

    http://10.10.110.2:19200/testindex/_analyze?analyzer=ik&text=我爱你中国

    使用curl:

    curl -XGET http://10.10.110.160:9200/testindex/_analyze?analyzer=ik -d '我爱你中国'

    http://www.cnblogs.com/huangfox/p/3629286.html

    http://www.th7.cn/Program/java/201606/884393.shtml

    http://blog.csdn.net/huwei2003/article/details/40591191

    http://my.oschina.net/u/579033/blog/394845

    分词:


    es的ik分词设置在:/benlaisearch/elasticsearch-2.3.3/plugins/ik/config目录下的IKAnalyzer.cfg.xml文件:

    <properties>
    <comment>IK Analyzer 扩展配置</comment>
    <!--用户可以在这里配置自己的扩展字典 -->
    <entry key="ext_dict">custom/mydict.dic;custom/single_word_low_freq.dic</entry>
    <!--用户可以在这里配置自己的扩展停止词字典-->
    <entry key="ext_stopwords">custom/ext_stopword.dic</entry>
    <!--用户可以在这里配置远程扩展字典 txt文件是utf-8格式-->
    <!-- <entry key="remote_ext_dict">http://192.168.1.15/mydict.txt</entry> -->
    <!--用户可以在这里配置远程扩展停止词字典-->
    <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
    </properties>
    

    1) 可以配置在服务器本地的路径里/benlaisearch/elasticsearch-2.3.3/plugins/ik/config/custom,文件夹下有基础词典文件,可以将自己的词语添加进去。词典修改时需要重启es

    2)   也可以配置在远程的地方:http://192.168.1.15/mydict.txt  es动态从远程文件上读取自定义词典,文档修改时他会自动加载

    拼音:

    https://github.com/medcl/elasticsearch-analysis-pinyin/tree/v1.7.3

    1 下载兼容版本的拼音分词插件:   git clone https://github.com/medcl/elasticsearch-analysis-pinyin.git

    2 进入下载文件存放目录执行解压命令:unzip elasticsearch-analysis-pinyin-1.7.3.zip

    3 进入解压后产生的文件目录:cd elasticsearch-analysis-pinyin-1.7.3,检查pom.xml文件的<elasticsearch.version>2.3.3</elasticsearch.version>配置的节点是否与es版本一致

    4 执行  mvn install  打包命令,产生可执行的jar包

    8 找到target/release目录

    9 复制并解压elasticsearch-analysis-pinyin-1.7.3.zip压缩包,得到(elasticsearch-analysis-pinyin-1.7.3.jar   pinyin4j-2.5.0.jar  plugin-descriptor.properties)3个文件,复制 到 es的plugins/pinyin目录

    10 重启es

    测试:http://192.168.60.60:19200/_analyze?analyzer=pinyin&text=我爱你中国

    结果:{"tokens":[{"token":"wo ai ni zhong guo","start_offset":0,"end_offset":5,"type":"word","position":0}]}

     测试:

     一个自定义分析器包含一个分词器和0到多个Token Filters,0到多个Char Filters

    关于向量的含义:Field.TermVector Field.TermVector.NO表示不索引Token的位置属性
          Field.TermVector.WITH_OFFSETS表示额外索引Token的结束点
          Field.TermVector.WITH_POSITIONS表示额外索引Token的当前位置
          Field.TermVector.WITH_POSITIONS_OFFSETS表示额外索引Token的当前和结束位置
          Field.TermVector.YES则表示存储向量

     {"token": "l","start_offset": 0,"end_offset": 3,"type": "word","position": 0},

    start_offset 代表分词前,词语的开始位置

    end_offset 代表分词前,词语的结束位置

    position  代表分词后,被分出来的词元,处于原始词语的位置。

    例如 刘德华 这个词,分词有 li  ,li处于第一个原始词的位置 position是0,de处于第二个原始词的位置 所以position是1

    https://github.com/medcl/elasticsearch-analysis-pinyin

     

  • 相关阅读:
    升级edk2源码的一点补充
    关于Ubuntu系统忘记密码的解决方法合集
    UEFI Shell 下的程序设计
    Windows下EDK2环境的搭建以及经典的程序设计Print Hello World !-----(Linux下的待后续熟练了再更新)
    一个刚入行的BIOS工程师的自我简介
    反爬虫,非标准的json格式解析
    Scrapy+selenium爬取简书全站-爬虫
    Scrapy
    Python 爬取豆瓣电影Top250排行榜,爬虫初试
    Linux(Ubuntu) MySQL数据库安装与卸载
  • 原文地址:https://www.cnblogs.com/shaner/p/5663588.html
Copyright © 2011-2022 走看看