五、Es分词,_analyze

分析数据

  • 使用分析器分析文档
  • 使用分析API
  • 分词
  • 字符过滤器
  • 分词过滤器
  • 提取词干
  • es所包含的分析器

1、什么是分析
在文档被发送并加入倒排索引之前,Es在主体上进行的操作;
a、字符过滤器: 使用字符过滤转变字符
b、 分词器:文本切分为分词,将文本切分为单个或多分分词
c、分词过滤器: 使用分词过滤器转变分词
d、分词索引: 将这些分词存储到索引中
e、分析流程图:

原始文本数据——>字符过滤器——>分词器——>分词过滤器——>文档索引(倒排索引)
  • analyzer 分析器类型:

         standard analyzer   standard    standard tokenizer, standard filter, lower case filter, stop filter
         simple analyzer     simple      lower case tokenizer【小写转换分词过滤器】
         stop analyzer       stop        lower case tokenizer, stop filter【停用词分词过滤器】
         keyword analyzer    keyword     不分词,内容整体作为一个token(not_analyzed)
         pattern analyzer    whitespace  正则表达式分词,默认匹配\W+
         language analyzers  lang        各种语言
         snowball analyzer   snowball    standard tokenizer, standard filter, lower case filter, stop filter, snowball filter
         custom analyzer     custom      一个Tokenizer, 零个或多个Token Filter, 零个或多个Char Filter
    
  • tokenizer 分词器类型

         standard tokenizer      standard
         edge ngram tokenizer    edgeNGram
         keyword tokenizer       keyword         不分词
         letter analyzer         letter          按单词分
         lowercase analyzer      lowercase       letter tokenizer, lower case filter
         ngram analyzers         nGram
         whitespace analyzer     whitespace      以空格为分隔符拆分
         pattern analyzer        pattern         定义分隔符的正则表达式
         uax email url analyzer  uax_url_email   不拆分url和email
         path hierarchy analyzer path_hierarchy  处理类似/path/to/somthing样式的字符串
    
  • token filter 分词过滤器类型

          standard filter         standard
          ascii folding filter    asciifolding
          length filter           length          去掉太长或者太短的
          lowercase filter        lowercase       转成小写
          ngram filter            nGram
          edge ngram filter       edgeNGram
          porter stem filter      porterStem      波特词干算法
          shingle filter          shingle         定义分隔符的正则表达式
          stop filter             stop            移除 stop words
          word delimiter filter   word_delimiter  将一个单词再拆成子分词
          stemmer token filter    stemmer
          stemmer override filter stemmer_override
          keyword marker filter   keyword_marker
          keyword repeat filter   keyword_repeat
          kstem filter            kstem
          snowball filter         snowball
          phonetic filter         phonetic        插件
          synonym filter          synonyms        处理同义词
          compound word filter    dictionary_decompounder, hyphenation_decompounder   分解复合词
          reverse filter          reverse         反转字符串
          elision filter          elision         去掉缩略语
          truncate filter         truncate        截断字符串
          unique filter           unique
          pattern capture filter  pattern_capture
          pattern replace filte   pattern_replace 用正则表达式替换
          trim filter             trim            去掉空格
          limit token count filter    limit       限制token数量
          hunspell filter         hunspell        拼写检查
          common grams filter     common_grams
          normalization filter    arabic_normalization, persian_normalization
    
  • char_filter 字符过滤器类型

         mapping char filter         mapping         根据配置的映射关系替换字符
         html strip char filter      html_strip      去掉HTML元素
         pattern replace char filter pattern_replace 用正则表达式处理字符串
    

2、自定义分析器
包含零个或多个字符过滤器、1个分词器、零个或多个分词过滤器
注意:

match和match_phrase这样的查询在执行之前会执行分析步骤,而term和terms不会

3、为文档使用分词器
3.1、在创建索引的时候添加分词器

public static function index()
{
    return [
        'index' => 'order',
        'body' => [
            'settings' => [
                'number_of_shards' => 2,
                'number_of_replicas' => 1,
                "index" => [
                    'analysis' => [
                        'analyzer' => [
                            'myAnalyzer' => [
                                //定制化的类型
                                'type' => 'custom',
                                //使用myTokenizer对文本进行分词
                                'tokenizer' => 'myTokenizer',
                                //指定文本需要经过的两个过滤器
                                'filter' => [
                                    'myFilter1', 'myFilter2',
                                ],
                                //设置制定的字符过滤器,会在其他分析步骤之前运行
                                'char_filter' => [
                                    'myCharFilter',
                                ],
                            ],
                        ],
                        //分词器
                        'tokenizer' => [
                            'myTokenizer' => [
                                'type' => 'letter'
                            ],
                        ],
                        //分词过滤器
                        'filter' => [
                            'myFilter1' => [
                                'type' => 'lowercase',
                            ],
                            'myFilter2' => [
                                'type' => 'kstem',
                            ],
                        ],
                        //字符过滤器
                        'char_filter' => [
                            'myCharFilter' => [
                                'type' => 'mapping',
                                'mappings' => [
                                    "ph=>f", "u=>you",
                                ],
                            ],
                        ],
                    ],
                ],
            ],
            'mappings' => [...],
        ]
    ];
}

3.2、在映射中指定某个字段的分析器

3.3、在Elasticsearch的配置文件中设置全局的分析器

4、使用分析API来分析文本

  • _analyze
    API允许向Es发送任何文本,制定所使用的分析器,分词器或者分词过滤器,然后获取分析之后的分词
    a、选择一个分析器
    b、通过组合即兴的创建分析其器
    c、基于某个字段映射的分析

5、使用词条向量来学习索引词条

  • _termvector

你可能感兴趣的:(五、Es分词,_analyze)