ES搜索

五、Es分词,_analyze

2018-12-30  本文已影响0人  yongfutian

分析数据

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

原始文本数据——>字符过滤器——>分词器——>分词过滤器——>文档索引(倒排索引)

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来分析文本

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

上一篇 下一篇

猜你喜欢

热点阅读