《十次方》项目小札-4-搜索服务编写

1.引入依赖与配置
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
            <version>3.0.6.RELEASE</version>
        </dependency>
spring:
  application:
    name: tensquare-search
  data:
    elasticsearch:
      cluster-nodes: 192.168.217.136:9300 // 使用java等第三方操作时es的端口为9300,自身客户端操作端口为9200
2.将实体类保存到索引库
package com.tensquare.search.pojo;

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;

import java.io.Serializable;
// 区域
@Document(indexName = "tensquare_article", type = "article")
public class Article implements Serializable {

    @Id
    private String id;

    //是否索引,就是看该域是否能被搜索。
    //是否分词,就表示搜索的时候是整体匹配还是单词匹配
    //是否存储,就是是否在页面上显示
    @Field(index = true, analyzer="ik_max_word", searchAnalyzer="ik_max_word")
    private String title;

    @Field(index = true, analyzer="ik_max_word", searchAnalyzer="ik_max_word")
    private String content;

    private String state;//审核状态

    // ... 省略s/getter
}

3.控制层
package com.tensquare.search.controller;

import com.tensquare.search.pojo.Article;
import com.tensquare.search.service.ArticleService;
import entity.PageResult;
import entity.Result;
import entity.StatusCode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/article")
@CrossOrigin
public class ArticleController {
    @Autowired
    private ArticleService articleService;

    @RequestMapping(method = RequestMethod.POST)
    public Result save(@RequestBody Article article){
        articleService.save(article);
        return new Result(true, StatusCode.OK, "添加成功");
    }

    @RequestMapping(value = "/{key}/{page}/{size}", method = RequestMethod.GET)
    public Result findByKey(@PathVariable String key, @PathVariable int page, @PathVariable int size){
        Page<Article> pageData = articleService.findByKey(key, page, size);
        return new Result(true, StatusCode.OK, "查询成功", new PageResult<Article>(pageData.getTotalElements(), pageData.getContent()));
    }
}

其他就是服务层的简单查询与dao调用,略。

可以发现,es针对实体类Article使用@Document(indexName = “tensquare_article”, type = “article”)标注该类为搜索服务类,indexName 为索引区,type 为区内搜索子域,使用@Field()注释该字段是否可被搜索等属性。

4.在docker中安装运行es
docker run -di --name=tensquare_es -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8

在这里插入图片描述

测试访问docker中的es:
访问-> http://192.168.74.130:9200/
在这里插入图片描述

访问-> http://192.168.74.130:9300/ 会发现无法访问。
解决:进入docker容器修改es的配置文件,使用命令:

docker exec -it tensquare_elasticsearch /bin/bash

在这里插入图片描述
值得注意的是,进入docker容器并进入到es的配置目录config下,找到.yml文件是无法使用 vi 命令操作文件的,需要让其挂载到宿主机上,故需要先复制一份配置文件。
我们继续(先exit):

docker cp tensquare_es:/usr/share/elasticsearch/config/elasticsearch.yml /usr/share/elasticsearch.yml

在这里插入图片描述
在这里插入图片描述
将 transport这行注释打开
在这里插入图片描述
退出编辑并保存 esc->shift z z

继续修改/etc/security/limits.conf

vi /etc/security/limits.conf 允许单个进程打开的最大文件个数

追加内容:

soft nofile 65536
hard nofile 65536 

修改/etc/sysctl.conf,追加内容,限制一个进程可拥有的虚拟内存数量

vm.max_map_count=655360

执行 sysctl -p 使其立即生效
在这里插入图片描述
重新启动容器或 reboot 整个虚拟机

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值