• ElasticSearch笔记-分析器


    文本分析器(Text analysis)

    在ES当中,只有text类型的字段才会用到全文索引。
    我们在建立索引和搜索时,都会用的分析器。
    分析器使ES支持全文索引,搜索的结果是和你搜索的内容相关的,而不是你搜索内容的确切匹配。
    分析器之所以能够使搜索支持全文索引,都是因为有分词器(tokenization),它可以将一句话、一篇文章切分成不同的词语,每个词语都是独立的。
    分析器除了要做分词,还要做归一化(Normalization)。如匹配大小写不同的词、复数形式的词、同义词。为了解决这些问题,分析器要把这些分词归一化到标准的格式。这样我们在搜索的时候就不用严格的匹配了,相似的词语我们也能够检索出来。

    分析器的组成

    分析器,无论是内置的,还是自定义的,都是由3部分组成:字符过滤器(character filters)、分词器(tokenizers)、分词过滤器(token filters)。

    字符过滤器

    字符过滤器接收最原始的文档,并且可以改变其内容,比如:可以把中文的一二三四五六七八九,变成阿拉伯数字123456789。它还可以过滤html标签,并对其进行转义。还可以通过正则表达式,把匹配到的内容转化成其他的内容。一个分析器可以有多个字符过滤器,也可以没有字符过滤器。

    分词器

    一个分析器只能有一个确定的分词器,它可以把一句话分成若干个词

    分词过滤器

    分词过滤器接收分词并且可以改变分词,比如:小写分词过滤器,它将接收到的分词全部转换成小写。助词过滤器,它将删除掉一些公共的助词,比如英语里的 the,is,are等,中文里的的,得等。同义词过滤器,它将在你的分词中,添加相应的同义词。一个分析器可以有多个分词过滤器,它们将按顺序执行。

    查看分词结果

    ES有分析器的api,我们指定分析器和文本内容,就可以得到分词的结果

    指定空格分析器

    POST _analyze
    {
      "analyzer": "whitespace",
      "text": "中华 人 民 共 和 国"
    }
    

    指定分词器、过滤器

    除了指定分析器,我们也可以指定分词器、过滤器

    POST _analyze
    {
      "tokenizer": "standard",
      "filter":  [ "lowercase", "asciifolding" ],
      "text":      "Is this déja vu?"
    }
    

    们指定了标准的分词器,小写过滤器和asciifolding过滤器

    配置文本分析器

    ES默认给我们配置的分析器是标准分析器。如果标准的分析器不适合你,你可以指定其他的分析器,或者自定义一个分析器。

    为指定的字段配置分析器

    我们在创建映射时,可以为每一个text类型的字段指定分析器

    PUT my_index
    {
      "mappings": {
        "properties": {
          "title": {
            "type": "text",
            "analyzer": "whitespace"
          }
        }
      }
    }
    

    为索引指定默认的分析器

    如果我们觉得为每一个字段指定分析器过于麻烦,我们还可以为索引指定一个默认的分析器

    PUT my_index
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "default": {
              "type": "whitespace"
            }
          }
        }
      }
    }
    

    IK中文分词器

    文呢,我们可以按照空格将一句话、一篇文章进行分词,然后对分词进行过滤,最后留下有意义的词。中文的一句话是没有空格的,这就要有一个强大的中文词库,当你的内容中出现这个词时,就会将这个词提炼出来。它就是IK中文分词器

    IK中文分词器的安装

    ES默认是没有IK中文分词器的,我们要将IK中文分词器作为一个插件安装到ES中,安装的步骤也很简单:

    • 从GitHub上下载适合自己ES版本的IK中文分词器,地址如下:https://github.com/medcl/elasticsearch-analysis-ik/releases。
    • 在我们的ES的插件目录中(${ES_HOME}/plugins)
    • mkdir ik,创建ik目录
    • 将我们下载好的IK分词器解压到ik目录,这里我们安装unzip命令,进行解压。
    • 重启我们所有的ES服务。

    IK中文分词器初探

    IK中文分词器插件给我们提供了两个分析器

    • ik_max_word: 会将文本做最细粒度的拆分
    • ik_smart:会做最粗粒度的拆分

    创建索引时指定IK分词器

    PUT ik_index
    {
    	"mappings": {
    		"properties": {
    			"id": {
    				"type": "long"
    			},
    			"title": {
    				"type": "text",
    				"analyzer": "ik_max_word"
    			}
    		}
    	}
    }
    

    参考:
    https://www.cnblogs.com/boboooo/p/12836770.html
    https://www.cnblogs.com/boboooo/p/12843578.html

  • 相关阅读:
    Servlet编程实例 续2
    Servlet编程实例 续1
    Servlet编程实例
    Servlet包介绍
    Servlet处理流程分析
    Servlet简介
    初始String
    类对象的定义
    类和对象
    JDBC编程之程序优化
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/14220309.html
Copyright © 2020-2023  润新知