五、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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342