0%

Elasticsearch分析器

单台机器的处理能力是有限的,如果想要增加系统的吞吐能力,只能增加多台机器,多台机器就构成了集群,每台机器叫做集群的一个节点。

一、概念

      Elasticsearch使用一种称为倒排索引的结构,它适用于快速的全文搜索,一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。对文档最全文索引,要依次经过字符过滤器、分词器、Token过滤器,这整个过程就称为分析器,经过分析器后最终形成文档的索引结构。

  1. 字符过滤器:字符串按顺序通过每个字符过滤器,它的作用是在分词前整理字符串,如一个字符过滤器可以用来去掉HTML,或者将&转化成and
  2. 分词器:经过字符过滤器的字符串会被分词器分为单个的词条,如一个简单的分词器遇到空格和标点的时候,可能会将文本拆分成词条。
  3. Token过滤器:被分隔后的词条按顺序通过每个token过滤器,这个过程可能会改变词条(大小写转换)、删除词条(如英文中的a、and、the等词)、增加词条(如jump和leap这种同义词)。

Elasticsearch内置分析器

  • 标准分析器:standard,默认,它根据Unicode联盟定义的单词边界划分文本,删除绝大部分标点,最后将词条小写。
  • 简单分析器:simple,在任何不是字母的地方分隔文本,将词条小写。
  • 空格分析器:whitespace,在空格的地方划分文本。
  • 语言分析器:language,根据指定语言的特点,会删除无用词条。

二、实战

  1. 官方demo:curl -X GET "localhost:9200/_analyze?pretty" -H 'Content-Type:application/json' -d '{"analyzer": "standard","text": "Text to analyze"}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"tokens" : [
{
"token" : "text",
"start_offset" : 0,
"end_offset" : 4,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "to",
"start_offset" : 5,
"end_offset" : 7,
"type" : "<ALPHANUM>",
"position" : 1
},
{
"token" : "analyze",
"start_offset" : 8,
"end_offset" : 15,
"type" : "<ALPHANUM>",
"position" : 2
}
]
}
  1. 语言分析器english:curl -X GET 'localhost:9200/_analyze?pretty' -H 'Content-Type:application/json' -d '{"analyzer": "english","text": "This is a test text,however, i do not know what to write!"}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
{
"tokens" : [
{
"token" : "test",
"start_offset" : 10,
"end_offset" : 14,
"type" : "<ALPHANUM>",
"position" : 3
},
{
"token" : "text",
"start_offset" : 15,
"end_offset" : 19,
"type" : "<ALPHANUM>",
"position" : 4
},
{
"token" : "howev",
"start_offset" : 20,
"end_offset" : 27,
"type" : "<ALPHANUM>",
"position" : 5
},
{
"token" : "i",
"start_offset" : 29,
"end_offset" : 30,
"type" : "<ALPHANUM>",
"position" : 6
},
{
"token" : "do",
"start_offset" : 31,
"end_offset" : 33,
"type" : "<ALPHANUM>",
"position" : 7
},
{
"token" : "know",
"start_offset" : 38,
"end_offset" : 42,
"type" : "<ALPHANUM>",
"position" : 9
},
{
"token" : "what",
"start_offset" : 43,
"end_offset" : 47,
"type" : "<ALPHANUM>",
"position" : 10
},
{
"token" : "write",
"start_offset" : 51,
"end_offset" : 56,
"type" : "<ALPHANUM>",
"position" : 12
}
]
}
  1. 中文分析器(安装完后要重启实例)

    • analysis-icu

      • 安装:./bin/elasticsearch-plugin install analysis-icu
      • 使用:curl -X GET 'localhost:9200/_analyze?pretty' -H 'Content-Type:application/json' -d '{"analyzer": "icu_analyzer","text": "自由、平等、公正、法治体现了社会主义核心价值观在价值导向上的规定,是立足社会层面提出的要求,反映了社会主义社会的基本属性,始终是党和国家奉行的核心价值理念。"}'
    • IK Analysis

      • 安装:./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip

        • 报错,版本问题
        1
        2
        3
        4
        5
        6
        7
        -> Installing https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip
        -> Downloading https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0. zip
        [=================================================] 100%
        -> Failed installing https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/ elasticsearch-analysis-ik-6.3.0.zip
        -> Rolling back https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3. 0.zip
        -> Rolled back https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0. zip
        Exception in thread "main" java.lang.IllegalArgumentException: Plugin [analysis-ik] was built for Elasticsearch version 6. 3.0 but version 7.6.0 is running
      • 重新安装:./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.0/elasticsearch-analysis-ik-7.12.0.zip

        • 报错,权限问题
        1
        2
        3
        4
        -> Failed installing https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.0/elasticsearch-analysis-ik-7.12.0.zip
        -> Rolling back https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.0/elasticsearch-analysis-ik-7. 12.0.zip
        -> Rolled back https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.0/elasticsearch-analysis-ik-7.12. 0.zip
        Exception in thread "main" java.nio.file.FileSystemException: /usr/local/elk-elasticsearch-7.12.0/config/analysis-ik: Operation not permitted
      • 重启报错,权限问题,chmod -R 777 plugins/analysis-ik/sudo chmod -R 777 config/analysis-ik

      1
      2
      Exception in thread "main" org.elasticsearch.bootstrap.BootstrapException: java.nio.file.AccessDeniedException: /usr/local/elk-elasticsearch-7.12.0/config/analysis-ik
      Likely root cause: java.nio.file.AccessDeniedException: /usr/local/elk-elasticsearch-7.12.0/config/analysis-ik
      • 重启实例

      • 使用:curl -X GET 'localhost:9200/_analyze?pretty' -H 'Content-Type:application/json' -d '{"analyzer": "ik_max_word","text": "富强、民主、文明、和谐是我国在社会主义初级阶段的奋斗目标,体现了社会主义核心价值观在发展目标上的规定,是立足国家层面提出的要求。"}'

      • 使用:curl -X GET 'localhost:9200/_analyze?pretty' -H 'Content-Type:application/json' -d '{"analyzer": "ik_smart","text": "中国共产党是马克思主义政党,马克思主义追求的终极目标是人的自由和全面的发展,党从成立之初就将其写在自己的旗帜上,并为之做出不懈奋斗,在实践上极大发展了人民的自由和平等,极大发展了社会的公正和法治。"}'

    • elasticsearch-thulac-plugin

三、参考

  1. 参考一
  2. 参考二