SpringBoot自学好几天 中途开始写笔记 SpringBoot与检索 ElasticSearch - SpringData ElasticSearch 整合 20190303

版权声明:本文为博主原创文章,未经博主允许不得转载,如需转载请在明显处标明出处! https://blog.csdn.net/qq_36291682/article/details/88084796
  1. pom.xml
     		<dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-elasticsearch</artifactId>
            </dependency> 
    
  2. 配置文件
    在这里插入图片描述
    spring.data.elasticsearch.cluster-name=elasticsearch
    spring.data.elasticsearch.cluster-nodes=192.168.2.118:300
    

https://github.com/spring-projects/spring-data-elasticsearch
在这里插入图片描述
在这里插入图片描述
这里speing-data-elasticsearch 是3版本
看上面的对照关系 需要使用6版本的elasticsearch

  1. 两种用法
    1)ElasticsearchRepository

    package com.example.springboot.entity;
    
    /**
     * @author LM
     * @create 2019-03-03 10:06
     */
     @Document(indexName = "suoyin",type = "book")
    public class Book {
        private Integer id;
        private String bookName;
        private String author;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getBookName() {
            return bookName;
        }
    
        public void setBookName(String bookName) {
            this.bookName = bookName;
        }
    
        public String getAuthor() {
            return author;
        }
    
        public void setAuthor(String author) {
            this.author = author;
        }
    
        @Override
        public String toString() {
            return "Book{" +
                    "id=" + id +
                    ", bookName='" + bookName + '\'' +
                    ", author='" + author + '\'' +
                    '}';
        }
    }
    
    
    package com.example.springboot.repository;
    
    import com.example.springboot.entity.Book;
    import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
    
    /**
     * @author LM
     * @create 2019-03-03 10:05
     */
    public interface BookRepository extends ElasticsearchRepository<Book,Integer> {
    }
    
    
      BookRepository bookRepository;
       @Test
        public void save(){
            Book book = new Book();
            bookRepository.index(book);
        }
    

    运行 访问索引下的数据:
    执行的时候报错了 也可以说是配置好以后启动的时候报错了
    9300端口不能访问!!!!
    解决办法: 创建配置文件 启动的时候指定配置文件

    cd /opt
    mkdir es
    cd es
    mkdir data
    touch es.yml
    vi es.yml
    

    es.yml

    	
    	#集群名
    	 
    	cluster.name: escluster
    	 
    	#节点名
    	 
    	node.name: node-111
    	 
    	 
    	 
    	#设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,
    	 
    	#指绑定这台机器的任何一个ip
    	 
    	network.bind_host: 0.0.0.0
    	 
    	#设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,
    	 
    	#值必须是个真实的ip地址 
    	 
    	network.publish_host: 192.168.2.118
    	 
    	 
    	 
    	#设置对外服务的http端口,默认为9200
    	 
    	http.port: 9200
    	 
    	#设置节点之间交互的tcp端口,默认是9300
    	 
    	transport.tcp.port: 9300
    	 
    	 
    	 
    	#是否允许跨域REST请求
    	 
    	http.cors.enabled: true
    	 
    	#允许 REST 请求来自何处
    	 
    	http.cors.allow-origin: "*"
    	 
    	 
    	 
    	#节点角色设置
    	 
    	node.master: true
    	 
    	node.data: true
    	 
    	 
    	 
    	#有成为主节点资格的节点列表
    	 
    	discovery.zen.ping.unicast.hosts: ["192.168.2.118:9300"]
    	 
    	#集群中一直正常运行的,有成为master节点资格的最少节点数(默认为1)
    	 
    	# (totalnumber of master-eligible nodes / 2 + 1)
    	 
    	discovery.zen.minimum_master_nodes: 1
    

    启动的时候用-v
    -v 本地目录/文件:容器目录/文件 :作用是将本地到文件或文件夹挂载到容器的指定文件或文件夹中

    docker run -d -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms512m -Xmx512m" --name ES03 -v /opt/es/es.yml:/usr/share/elasticsearch/config
    /elasticsearch.yml 5acf0e8da90b
    

    可能会出现:
    maxvirtual memory areas vm.max_map_count [65530] istoo low, increase to at least [262144]
    解决办法:

    vi /etc/sysctl.conf 
    #在sysctl.conf中添加一行  vm.max_map_count=655300 
    

    保存并退出后执行

    
     sysctl -p 
    

    再次重新启动elasticsearch 就可以了 !!!
    重新执行save操作

     @Autowired
        BookRepository bookRepository;
        @Test
        public void save(){
            Book book = new Book();
            book.setId(12);
            book.setAuthor("李啦啦啦");
            book.setBookName("踩踩踩");
            bookRepository.index(book);
        }
    

    postman查找
    在这里插入图片描述
    与jpa一样 也可以自定义
    例子:

    	
    /**
     * @author LM
     * @create 2019-03-03 10:05
     */
    public interface BookRepository extends ElasticsearchRepository<Book,Integer> {
        public List<Book> findBooksByBookNameLike(String bookeName);
    }
    
    
     @Test
        public void get(){
         List<Book> li= bookRepository.findBooksByBookNameLike("踩");
        System.out.println("========================");
         for (Book b : li){
             System.out.println(b);
         }
        System.out.println("======================");
        }
    

    结果:在这里插入图片描述
    参考这里好多种表达方式:
    https://docs.spring.io/spring-data/elasticsearch/docs/3.1.5.RELEASE/reference/html/
    在这里插入图片描述
    2)ElasticsearchTemplate 官方文档都有使用案例

猜你喜欢

转载自blog.csdn.net/qq_36291682/article/details/88084796