ElasticSearch-分词&安装ik分词器&自定义分词库&SpringBoot整合

ElasticSearch-分词&安装ik分词器&自定义分词库&SpringBoot整合

一个tokenizer(分词器)接收一个字符流,将之分割为独立的tokens(词元,通常是独立的单词),然后输出tokens流。

例如:whitespace tokenizer遇到空白字符时分割文本。它会将文本"Quick brown fox!"分割为[Quick,brown,fox!]

该tokenizer(分词器)还负责记录各个terms(词条)的顺序或position位置(用于phrase短语和word proximity词近邻查询),以及term(词条)所代表的原始word(单词)的start(起始)和end(结束)的character offsets(字符串偏移量)(用于高亮显示搜索的内容)。

elasticsearch提供了很多内置的分词器(标准分词器),可以用来构建custom analyzers(自定义分词器)。

关于分词器: https://www.elastic.co/guide/en/elasticsearch/reference/7.6/analysis.html

但是对于中文,我们需要安装额外的分词器

安装IK分词器

所有的语言分词,默认使用的都是“Standard Analyzer”,但是这些分词器针对于中文的分词,并不友好。为此需要安装中文的分词器。

注意:不能用默认elasticsearch-plugin install xxx.zip 进行自动安装。IK分词器的版本跟ES的版本一一对应
https://github.com/medcl/elasticsearch-analysis-ik/releases

在前面安装的elasticsearch时,我们已经将elasticsearch容器的“/usr/share/elasticsearch/plugins”目录,映射到宿主机的“ /mydata/elasticsearch/plugins”目录下,所以比较方便的做法就是下载“/elasticsearch-analysis-ik-7.4.2.zip”文件,然后解压到该文件夹下即可。安装完毕后,需要重启elasticsearch容器。

测试分词器

GET _analyze
{
   "analyzer": "ik_smart", 
   "text":"我是中国人"
}

GET _analyze
{
   "analyzer": "ik_max_word", 
   "text":"我是中国人"
}

自定义词库

比如我们要把笑一笑算作一个词

  1. 修改/usr/share/elasticsearch/plugins/ik/config中的IKAnalyzer.cfg.xml



    IK Analyzer 扩展配置
    
    
     
    
    
    http://192.168.56.10/es/fenci.txt 
    
    

修改完成后,需要重启elasticsearch容器,否则修改不生效。docker restart elasticsearch

更新完成后,es只会对于新增的数据用更新分词。历史数据是不会重新分词的。如果想要历史数据重新分词,需要执行:

POST my_index/_update_by_query?conflicts=proceed

远程扩展词典

搭配nginx做远程扩展词典

# 远程扩展词典路径http://192.168.56.10/es/fenci.txt
mkdir /mydata/nginx/html/es
cd /mydata/nginx/html/es
vim fenci.txt
输入 笑一笑

测试效果:

GET _analyze
{
   "analyzer": "ik_max_word", 
   "text":"我是笑一笑"
}

SpringBoot整合

官方文档使用手册

  1. 导入依赖,这里的版本要和所按照的ELK版本匹配

    org.elasticsearch.client
    elasticsearch-rest-high-level-client
    7.4.2

  1. 在spring-boot-dependencies中所依赖的ES版本位6.8.5,要改掉

    1.8
    7.4.2

请求测试项,比如es添加了安全访问规则,访问es需要添加一个安全头,就可以通过requestOptions设置

官方建议把requestOptions创建成单实例

@Configuration
public class GuliESConfig {

    public static final RequestOptions COMMON_OPTIONS;

    static {
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();

        COMMON_OPTIONS = builder.build();
    }

    @Bean
    public RestHighLevelClient esRestClient() {

        RestClientBuilder builder = null;
        // 可以指定多个es
        builder = RestClient.builder(new HttpHost(host, 9200, "http"));

        RestHighLevelClient client = new RestHighLevelClient(builder);
        return client;
    }
}

你可能感兴趣的:(ElasticSearch-分词&安装ik分词器&自定义分词库&SpringBoot整合)