栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot+Elasticsearch+ik

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot+Elasticsearch+ik

  1. docker 安装 elasticsearch、kibana、ik分词器

    #  elasticsearch kibana 版本要一致
    docker pull elasticsearch 
    docker pull kibana
    
    #运行elasticsearch
    docker run --name elasticsearch -p 9200:9200 
     -p 9300:9300 
     -e "discovery.type=single-node" 
     -e ES_JAVA_OPTS="-Xms4g -Xmx4g" 
      -v /usr/local/data-docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml 
     -v /usr/local/data-docker/elasticsearch/data:/usr/share/elasticsearch/data 
     -v /usr/local/data-docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins 
     -d 37190fe5beea
     
     # 进入elasticsearch 容器
     docker exec -it -u root elasticsearch /bin/bash
     
     # 修改配置文件
     vi config/elasticsearch.yml
    
    #########################添加配置################################### 
    xpack.security.enabled: true
    xpack.security.transport.ssl.enabled: true
    
    # 退出容器,重启elasticsearch
    exit
    docker restart elasticsearch
    
    # 安装的elasticsearch是没有密码 生成一个密码
    docker exec -it -u root elasticsearch /bin/bash
    ./bin/elasticsearch-setup-passwords -h
    # 保存生成的密码
     ./bin/elasticsearch-setup-passwords auto
    
    
    ## 分词器的版本一定要与 elasticsearch一致
    # 下载插件 拼音分词 https://github.com/medcl/elasticsearch-analysis-pinyin/releases
    ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v7.8.0/elasticsearch-analysis-pinyin-7.8.0.zip
    ## 分词器的版本一定要与 elasticsearch一致
    # 下载 中文分词 https://github.com/medcl/elasticsearch-analysis-ik/releases
    ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.8.0/elasticsearch-analysis-ik-v7.8.0.zip
    
    
     
     # 运行kibana
    docker run -d -it --restart=always --privileged=true --name=kibana   -e ELASTICSEARCH_HOSTS=http://localhost:9200  -p 5601:5601 -v/home/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.ym eadc7b3d59dd
    
    # 进入kibana容器
    docker exec -it -u root kibana  /bin/bash
     # 修改配置
     vi config/kibana.yml
    #########################配置################################### 
    server.name: kibana
    # kibana的主机地址 0.0.0.0可表示监听所有IP
    server.host: "0.0.0.0"
    # kibana访问es的URL
    elasticsearch.hosts: [ "http://127.0.0.1:9200" ]
    elasticsearch.username: 'kibana_system'
    elasticsearch.password: '生成好的密码'
    # 显示登陆页面
    xpack.monitoring.ui.container.elasticsearch.enabled: true
    # 语言
    i18n.locale: "zh-CN"
    
    ##重启容器
    docker restart kibana
    
    
  2. 访问kibana

找到开发工具菜单

# 创建索引
PUT /course_product_category/
{
	"settings":{
		"number_of_shards": 3,
		"number_of_replicas": 1,
		"analysis": {
            "analyzer": {
				"default":{
					"tokenizer":"ik_max_word"
				},				
                "pinyin_analyzer": {
                    "type": "custom",
                    "tokenizer": "my_pinyin",
                    "filter": ["word_delimiter"]
                }
            },
            "tokenizer": {
                "my_pinyin" : {
                      "type" : "pinyin",
                      "keep_first_letter":true,
                      "keep_separate_first_letter" : true,
                      "keep_full_pinyin" : true,
                      "keep_original" : true,
                      "limit_first_letter_length" : 16,
                      "lowercase" : true
                  }
            }
        }
	}
}



# 配置索引 mapping
PUT /course_product_category/_mapping/category?include_type_name=true
{    
	"properties" : {
		"name" : {
			"type" : "text",
			"analyzer" : "ik_max_word",
			"fields" : {
				"pinyin" : {
					"type" : "text",
					"term_vector" : "with_positions_offsets",
					"analyzer" : "pinyin_analyzer"
				  }
			 }
		},      
		"columnName" : {
			"type" : "text",
			"analyzer" : "ik_max_word",
			"fields" : {
				"pinyin" : {
					"type" : "text",
					"term_vector" : "with_positions_offsets",
					"analyzer" : "pinyin_analyzer"
				  }
			 }
		}
	}
}
  1. 主要代码

  org.springframework.boot
  spring-boot-starter-data-elasticsearch



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

	
//@Mapping(mappingPath = "elasticsearch_mapping.json")//设置mapping
//@Setting(settingPath = "elasticsearch_setting.json")//设置setting
@Data
@EqualsAndHashCode(callSuper = false)
@Document(indexName = "course_product_category",type = "category",shards = 1,replicas = 0)
public class EsCourseProductCategory implements Serializable {
    private static final long serialVersionUID = 3191530395115676563L;

    @Id
    private Integer id;
    
    @Field(type = FieldType.Text,analyzer = "pinyin_analyzer",searchAnalyzer = "pinyin_analyzer")
    private String name;

    
    @Field(type = FieldType.Text,analyzer = "pinyin_analyzer",searchAnalyzer = "pinyin_analyzer")
    private String columnName;

    
    @Field(type = FieldType.Keyword)
    private String age;
    
    @Field(type = FieldType.Keyword)
    private String difficulty;
   
}

	
    public NativeSearchQueryBuilder structureQuery(String keyword) {
        DisMaxQueryBuilder disMaxQuery = QueryBuilders.disMaxQuery();
        MatchQueryBuilder title = QueryBuilders.matchQuery("name", keyword);
        MatchQueryBuilder content = QueryBuilders.matchQuery("columnName", keyword);
        MatchQueryBuilder pinyContent = QueryBuilders.matchQuery("name.pinyin", keyword);
        MatchQueryBuilder pinyTitle = QueryBuilders.matchQuery("columnName.pinyin", keyword);

        disMaxQuery.add(title);
        disMaxQuery.add(content);
        disMaxQuery.add(pinyContent);
        disMaxQuery.add(pinyTitle);
        return new NativeSearchQueryBuilder()
                .withQuery(disMaxQuery).withSort(SortBuilders.scoreSort().order(SortOrder.DESC));
    }

    public Map getSearchNames(String keyword) {
        if (StringUtils.isBlank(keyword)) {
            return new HashMap<>();
        }

        NativeSearchQueryBuilder nativeSearchQueryBuilder = structureQuery(keyword);
        NativeSearchQuery query = nativeSearchQueryBuilder.build();
        Iterable search = esCourseProductCategoryRepository.search(query).getContent();
        Iterator iterator = search.iterator();

        Map result = new HashMap<>();
        while (iterator.hasNext()) {
            EsCourseProductCategory next = iterator.next();
            result.put(next.getId(),StringUtils.isNotEmpty(next.getColumnName()) ? next.getColumnName() + "-" + next.getName() : next.getName());
        }

        return result;
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862955.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号