欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot 2.x (12):整合Elasticsearch

程序员文章站 2022-04-14 15:41:05
Elasticsearch:一个优秀的搜索引擎框架 搜索方面最基本的是SQL的like语句 进一步的有Lucene框架 后来有企业级的Solr框架 而Elasticsearch框架尤其适合于数据量特别大的 Elasticsearch底层也是由Lucene实现的 应用:Github、*、Stac ......

elasticsearch:一个优秀的搜索引擎框架

搜索方面最基本的是sql的like语句

进一步的有lucene框架

后来有企业级的solr框架

而elasticsearch框架尤其适合于数据量特别大的

elasticsearch底层也是由lucene实现的

 

应用:github**

 

elasticsearch部署:

纯java开发,因此必备jdk

采用5.6版本而不是最新版,因为springboot可能不支持

 

推荐部署到linux服务器,但是这里为了方便我直接部署在本地windows系统

下载地址:

 

下载好进入bin目录,运行elasticsearch.bat运行

如果报错,通常情况是机器配置不够或者以错误地root权限启动了

win10高配机器不存在这种问题

 

http://127.0.0.1:9200/:进入主页

http://localhost:9200/_cat/health?v:查看集群状态

localhost:9200/_cat/indices?v:查看索引列表

 

参考官网,创建索引:

SpringBoot 2.x (12):整合Elasticsearch

 

查看我创建的索引:

SpringBoot 2.x (12):整合Elasticsearch

 

加入数据:

SpringBoot 2.x (12):整合Elasticsearch

 

查看我加入的数据:

SpringBoot 2.x (12):整合Elasticsearch

 

springboot进行整合

依赖:

        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-data-elasticsearch</artifactid>
        </dependency>

查看依赖后发现,springboot2.1.4采用的elasticsearch是6.4.3版本

为了确保不出问题,我重新下载6.4.3版本,事后我验证了,就以下的这些基本操作,es的版本可以不影响

SpringBoot 2.x (12):整合Elasticsearch

 

新建实体类article:

搜索的对象就是文章

package org.dreamtech.esdemo.domain;

import java.io.serializable;

import org.springframework.data.elasticsearch.annotations.document;

/**
 * 文章对象
 * 
 * @author xu yiqing
 *
 */
@document(indexname = "blog", type = "article")
public class article implements serializable {

    private static final long serialversionuid = 8210249797764830332l;

    private long id;

    private string title;

    private string summary;

    private string content;

    private int pv;

    public long getid() {
        return id;
    }

    public void setid(long id) {
        this.id = id;
    }

    public string gettitle() {
        return title;
    }

    public void settitle(string title) {
        this.title = title;
    }

    public string getsummary() {
        return summary;
    }

    public void setsummary(string summary) {
        this.summary = summary;
    }

    public string getcontent() {
        return content;
    }

    public void setcontent(string content) {
        this.content = content;
    }

    public int getpv() {
        return pv;
    }

    public void setpv(int pv) {
        this.pv = pv;
    }

}

 

对es进行配置:

spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300
spring.data.elasticsearch.repositories.enabled=true

 

对es进行操作默认的接口:

package org.dreamtech.esdemo.repository;

import org.dreamtech.esdemo.domain.article;
import org.springframework.data.elasticsearch.repository.elasticsearchrepository;
import org.springframework.stereotype.component;

@component
public interface articlerepository extends elasticsearchrepository<article, long> {
}

 

controller层测试代码:

package org.dreamtech.esdemo.controller;

import org.dreamtech.esdemo.domain.article;
import org.dreamtech.esdemo.repository.articlerepository;
import org.elasticsearch.index.query.querybuilder;
import org.elasticsearch.index.query.querybuilders;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.web.bind.annotation.getmapping;
import org.springframework.web.bind.annotation.restcontroller;

@restcontroller
public class articlecontroller {

    @autowired
    private articlerepository articlerepository;

    @getmapping("/save")
    public object save(long id, string title) {

        article article = new article();
        article.setid(id);
        article.setpv(123);
        article.setcontent("springboot整合elasticsearch");
        article.settitle(title);
        article.setsummary("搜索框架整合");

        articlerepository.save(article);

        return "save";
    }

    @getmapping("/search")
    public object search(string title) {
        querybuilder querybuilder = querybuilders.matchquery("title", title);
        iterable<article> list = articlerepository.search(querybuilder);
        return list;
    }

}

 

实际测试:

 SpringBoot 2.x (12):整合Elasticsearch

 

用这种方式保存多个文章后就可以进行搜索了:

SpringBoot 2.x (12):整合Elasticsearch