Elasticsearch之analysis

Posted 爱上口袋的天空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch之analysis相关的知识,希望对你有一定的参考价值。

1、简介

analysis(只是一个概念),文本分析是将全文本转换为一系列单词的过程,也叫分词。analysis是通 过analyzer(分词器)来实现的,可以使用Elasticsearch内置的分词器,也可以自己去定制一些分词 器。 除了在数据写入的时候进行分词处理,那么在查询的时候也可以使用分析器对查询语句进行分词。

anaylzer是由三部分组成,例如有:Hello a World, the world is beautiful

1. Character Filter: 将文本中html标签剔除掉。

2. Tokenizer: 按照规则进行分词,在英文中按照空格分词。

3. Token Filter: 去掉stop world(停顿词,a, an, the, is, are等),然后转换小写

2、内置分词器

内置分词器示例:

3、ik分词器

IK分词器在任何操作系统下安装步骤均⼀样: 在ES的家⽬录下的 plugins ⽬录下创建名为 ik 的 ⽂件夹,然后将下载后的 zip 包拷⻉到 ik 解压即可

IK分词器提供了两种分词⽅式:

验证:


4、⾃定义词库

在很多的时候,业务上的⼀些词库极有可能不在IK分词器的词库中,需要去定制属于我们⾃⼰的词 库。例如下⾯的例⼦中, 正井猫 、 up主 被切分为⼀个个的字,我们希望这两个词语是不被拆 分;另外 的 作为中⽂的停顿词,也不希望出现在分词中,所以我们需要⾃定义词库和停顿词词 库。


进⼊到 $ES_HOME/plugins/ik/config ⽬录下,创建 custom ⽬录,在⽬录下创建 mydic.dic 、 ext_stopword.dic ⽂件,

在 mydic.dic ⽂件中添加两⾏内容:


在 ext_stopword.dic 中添加⼀⾏内容:

最后修改 $ES_HOME/plugins/ik/config/IKAnalyzer.cfg.xml ⽂件,内容如下:

重启重启elasticsearch elasticsearch , 重新执⾏如上的命令,结果如下:


5、IK分词器在工作中的实际案例

5.1、首先创建new索引的mapping

PUT news
{
  "mappings": {
    "properties": {
      "title":{
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      },
      "content":{
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      }
    }
  }
}

注意:analyzer和search_analyzer的区别如下:

      analyzer:表示数据在进入news这个索引中的时候,我们尽量让它多的对我们数据进行分词,后面才能够达到精准的匹配。

      search_analyzer:对我们的数据进行搜索的时候不要进行过多的分词处理,提高效率。

5.2、查看创建的索引结构

     GET news/_mapping

     

5.3、创建数据进入索引

5.4、通过语句查询

下面我们再新增两条数据测试

查询一下柳岩:

可以发现我们其实仅仅只是查询柳岩,但是两条数据都查询出来了,那么我们首先配置一下mydic.dic扩展词典:

重新启动elasticsearch:

因为我们之前的数据已经分过词了,所以我们需要重新分词相关数据:

先重新索引柳岩:

POST news/_update_by_query
{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "term": {
                  "title": {
                    "value": "柳"
                  }
                }
              },{
                "term": {
                  "title": {
                    "value": "岩"
                  }
                }
              }
            ]
          }
        },{
          "bool": {
            "must": [
              {
                "term": {
                  "content": {
                    "value": "柳"
                  }
                }
              },{
                "term": {
                  "content": {
                    "value": "岩"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

先重新索引柳真:

POST news/_update_by_query
{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "term": {
                  "title": {
                    "value": "柳"
                  }
                }
              },{
                "term": {
                  "title": {
                    "value": "真"
                  }
                }
              }
            ]
          }
        },{
          "bool": {
            "must": [
              {
                "term": {
                  "content": {
                    "value": "柳"
                  }
                }
              },{
                "term": {
                  "content": {
                    "value": "真"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

再次查询:

6、pinyin分词器的安装

pinyin 分词器在任何操作系统下安装步骤均⼀样: 在ES的家⽬录下的 plugins ⽬录下创建名为 pinyin 的⽂件夹,然后将下载后的 zip 包拷⻉到 pinyin 解压即可

重启es

测试pingyin插件

效果:

6、Elasticsearch之⾃定义分词器以及应⽤

6.1、案例需求:


6.2、设置分词器

6.3、验证分词器效果

6.4、为属性添加分词器

6.5、结果验证

   执⾏如下命令添加数据

   
   

以上是关于Elasticsearch之analysis的主要内容,如果未能解决你的问题,请参考以下文章

elasticsearch-analysis-pinyin

elasticsearch插件之ik分词器

Elasticsearch 2.3.x 拼音分词 analysis-lc-pinyin

Elasticsearch之自动补全案例实战

elasticsearch插件之ik分词器

ElasticSearch系列:ElasticSearch HeadKibanaElasticsearch-Analysis-Ik安装使用