一、安装elasticsearch

1.到官网下载安装包https://www.elastic.co/,这里下载的是7.4版本

2.创建一个安装目录

mkdir /usr/local/es

3.将elasticsearch-7.4.0-linux-x86_64.tar.gz解压到/usr/local/es 目录下

tar -zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz -C /usr/local/es 

4.因为安全问题,ElasticSearch 不允许root用户直接运行,所以要创建新用户,在root用户中创建新用户 

 #新增es1账户

useradd es1

 #为es1账户设置密码 

passwd es1

es6对浏览器版本要求_es6对浏览器版本要求

5.为用户授权

chown -R es1:es1 /usr/local/es/elasticsearch-7.4.0

es6对浏览器版本要求_搜索引擎_02

6. 修改config目录下elasticsearch.yml文件

vi /usr/local/es/elasticsearch-7.4.0/config/elasticsearch.yml

 修改以下内容

cluster.name: my-application

node.name: node-1

network.host: 0.0.0.0

http.port: 9200

cluster.initial_master_nodes: ["node-1"]

cluster.name:配置elasticsearch的集群名称,默认是elasticsearch。

node.name:节点名,elasticsearch会默认随机指定一个名字,方便管理

network.host:设置为0.0.0.0允许外网访问

http.port:Elasticsearch的http访问端口

cluster.initial_master_nodes:初始化新的集群时需要此配置来选举master 

7.修改虚拟机的配置文件,新创建的offcn用户最大可创建文件数,最大虚拟内存太小,切换到root用户,编辑下列配置文件

切换到root用户

su root

 设置最大可创建文件数太小

vi /etc/security/limits.conf
# 在文件末尾中增加下面内容
es1 soft nofile 65536
es1 hard nofile 65536
vi /etc/security/limits.d/20-nproc.conf
# 在文件末尾中增加下面内容
es1 soft nofile 65536
es1 hard nofile 65536
*   hard nproc  4096

设置最大虚拟内存太小

vi /etc/sysctl.conf

# 在文件中增加下面内容

vm.max_map_count=655360

  重新加载:

sysctl -p 

8.启动ElasticSearch 

 #切换到es1 用户启动

su es1

cd /usr/local/es/elasticsearch-7.4.0/bin

#启动

./elasticsearch

es6对浏览器版本要求_搜索引擎_03

 新打开一个终端,关闭防火墙

systemctl stop firewalld.service

9. 打开网页访问 ip+9200端口,此时elasticsearch已成功启动

es6对浏览器版本要求_User_04

二、安装辅助工具Kibana

Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索 引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。

1.官网下载安装包: https://www.elastic.co/cn/

同样下载7.4版本 

2.创建安装目录

mkdir /usr/local/kibana

3.将kibana解压到安装目录

tar -zxvf kibana-7.4.0-linux-x86_64.tar.gz -C /usr/local/kibana 

4. 修改kibana配置 

vi /usr/local/kibana/kibana-7.4.0-linux-x86_64/config/kibana.yml

添加以下内容

server.port: 5601

server.host: "0.0.0.0"

server.name: "kibana-es1"

elasticsearch.hosts: ["http://127.0.0.1:9200"]

elasticsearch.requestTimeout: 99999 

server.port:http访问端口

server.host:ip地址,0.0.0.0表示可远程访问

server.name:kibana服务名

elasticsearch.hosts:elasticsearch地址

elasticsearch.requestTimeout:请求elasticsearch超时时间,默认为30000,此处可根据情况设置 

5.启动kibana, 由于kibana不建议使用root用户启动,如果用root启动,需要加--allow-root参数

# 切换到kibana的bin目录

cd /usr/local/kibana/kibana-7.4.0-linux-x86_64/bin

# 启动

./kibana --allow-root 

es6对浏览器版本要求_elasticsearch_05

6.访问kibana ip+5601端口,kibana成功启动

es6对浏览器版本要求_User_06

三、IK分词器安装

1.下载压缩包elasticsearch-analysis-ik-7.4.0.zip-Java文档类资源

2.在/usr/local/es/elasticsearch-7.4.0/plugins/下新建目录analysis-ik

cd /usr/local/es/elasticsearch-7.4.0/plugins

mkdir analysis-ik

3.将下载的压缩包 复制到 analysis-ik目录下解压

由于这里是zip包不是gz包,所以我们需要使用unzip命令进行解压,如果本机环境没有安装unzip,需安装:

yum install zip

yum install unzip

#执行解压

unzip /usr/local/es/elasticsearch-7.4.0/plugins/analysis-ik/elasticsearch-analysis-ik-7.4.0.zip

4.将elasticsearch-analysis-ik-7.4.0目录下的config目录中的所有文件 拷贝到elasticsearch的config目录 

cp -R /usr/local/es/elasticsearch-7.4.0/plugins/analysis-ik/config/* /usr/local/es/elasticsearch-7.4.0/config

5.配置成功之后,重新启动ES,重新启动Kibana,使用IK分词器

四、测试 

测试使用kibana工具 访问ip+5601端口,点击右边导航栏的扳手图标

1.创建索引

es6对浏览器版本要求_elasticsearch_07

2.查询索引

es6对浏览器版本要求_es6对浏览器版本要求_08

 3.删除索引

es6对浏览器版本要求_es6对浏览器版本要求_09

4.创建索引并添加映射

es6对浏览器版本要求_elasticsearch_10

 5.查询映射

es6对浏览器版本要求_es6对浏览器版本要求_11

6.添加字段

es6对浏览器版本要求_User_12

7.添加文档,指定id

 

es6对浏览器版本要求_ci_13

 8.查询所有文档

es6对浏览器版本要求_es6对浏览器版本要求_14

9.删除指定id文档 

 

es6对浏览器版本要求_User_15

10.使用IK分词器查询文档 

(1)创建索引,添加映射,并指定分词器为ik分词器

PUT person
 {
 "mappings": {
 "properties": {
 "name": {
 "type": "keyword"
 },
 "address": {
 "type": "text",
 "analyzer": "ik_max_word"
 },
 "age":{
 "type":"integer"
 }
 }
 }
 }

 (2)添加文档

POST /person/_doc/1
 {
 "name":"张三",
 "age":18,
 "address":"北京海淀区"
 }
 POST /person/_doc/2
 {
 "name":"李四",
 "age":18,
 "address":"北京朝阳区"
 }
 POST /person/_doc/3
 {
 "name":"王五",
 "age":18,
 "address":"北京昌平区"
 }
 POST /person/_doc/4
 {
 "name":"马六",
 "age":18,
 "address":"昌平区慧聪园"
 }

(3)查询映射

es6对浏览器版本要求_User_16

(4)查看分词效果

es6对浏览器版本要求_es6对浏览器版本要求_17

(5)词条查询:term ,查询person中匹配到"北京"两字的词条 

 

es6对浏览器版本要求_User_18

 (6)全文查询:match, 全文查询会分析查询条件,先将查询条件进行分词,然后查询,求并集

 

es6对浏览器版本要求_ci_19

五、Java使用easy-es对索引以及文档进行操作,官网地址:Easy-Es

1.引入相关依赖,并排除springboot中的es依赖

<dependency>            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.elasticsearch.client</groupId>
                    <artifactId>elasticsearch-rest-high-level-client</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.elasticsearch</groupId>
                    <artifactId>elasticsearch</artifactId>
                </exclusion>
            </exclusions>
        </dependency>       
         <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.4.0</version>
        </dependency>

        <dependency>
            <groupId>org.dromara.easy-es</groupId>
            <artifactId>easy-es-boot-starter</artifactId>
            <version>2.0.0-beta4</version>
        </dependency>

2.添加配置

easy-es:
  address : 127.0.0.1:9200 # es连接地址+端口 格式必须为ip:port,如果是集群则可用逗号隔开
  username: es1 #如果无账号密码则可不配置此行
  password: es1#如果无账号密码则可不配置此行

 3.创建索引实体类

@Data
@ApiModel(value = "User", description = "用户")
@IndexName(value = "user", shardsNum = 3, replicasNum = 2) // 可指定分片数,副本数,若缺省则默认均为1
public class User {
    /**
     * id
     */
    @IndexId(type = IdType.CUSTOMIZE)
    @ApiModelProperty(value = "id", example = "1")
    private Integer id;

    @ApiModelProperty(value = "高亮内容")
    private String lightName;
    /**
     * 名字
     */
    @IndexField(fieldType = FieldType.TEXT, analyzer = Analyzer.IK_SMART, searchAnalyzer = Analyzer.IK_MAX_WORD)
    @HighLight(mappingField = "lightName")
    @ApiModelProperty(value = "名字", example = "张天")
    private String name;
    /**
     * 年龄
     */
    @ApiModelProperty(value = "年龄", example = "25")
    @IndexField(fieldType = FieldType.INTEGER)
    private Integer age;
    /**
     * 家庭地址
     */
    @ApiModelProperty(value = "家庭地址", example = "四川省成都市金牛区")
    @IndexField(fieldType = FieldType.TEXT)
    private String address;

    @IndexField(fieldType = FieldType.GEO_POINT, analyzer = Analyzer.IK_SMART, searchAnalyzer = Analyzer.IK_MAX_WORD)
    @ApiModelProperty(value = "地理位置经纬度坐标", example = "40.13933715136454,116.63441990026217")
    private String location;
    /**
     * 学校
     */
    @ApiModelProperty(value = "学校", example = "北京大学")
    @IndexField
    private String school;
    /**
     * 手机号码
     */
    @ApiModelProperty(value = "手机号码", example = "18381197452")
    @IndexField(fieldType = FieldType.TEXT)
    private String phone;

}

4.创建一个es的mapper

@Component
public interface MyUserMapper extends BaseEsMapper<User> {
}

5.创建搜索请求实体

@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "QueryUserDTO", description = "es搜索用户请求实体")
public class QueryUserDTO {
    /**
     * id
     */
    @ApiModelProperty(value = "id", example = "1")
    private Integer id;
    /**
     * 名字
     */
    @ApiModelProperty(value = "名字", example = "张天")
    private String name;
    /**
     * 家庭地址
     */
    @ApiModelProperty(value = "家庭地址", example = "四川省成都市金牛区白草路")
    private String address;
    /**
     * 学校
     */
    @ApiModelProperty(value = "学校", example = "成都东软学院")
    private String school;
    /**
     * 手机号码
     */
    @ApiModelProperty(value = "手机号码", example = "18381197452")
    private String phone;

    @ApiModelProperty(value = "当前页", example = "1")
    private Integer pageNum;

    @ApiModelProperty(value = "每页条数", example = "10")
    private Integer pageSize;


}

6.创建测试controller

@RestController
@Api(tags = "es")
public class TestUseEeController {

    @Resource
    private MyUserMapper userMapper;

    @GetMapping("/createIndex")
    @Anonymous
    @ApiOperation(value = "创建es索引", notes = "创建es索引")
    public ResponseVO<Boolean> createIndex() {
        return ResponseVO.success(userMapper.createIndex());
    }

    @GetMapping("/deleteIndex")
    @Anonymous
    @ApiOperation(value = "删除es索引", notes = "删除es索引")
    public ResponseVO<Boolean> deleteIndex() {
        return ResponseVO.success(userMapper.deleteIndex("user"));
    }

    @PostMapping("/insert")
    @Anonymous
    @ApiOperation(value = "插入数据", notes = "插入数据")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "user", value = "用户数据", paramType = "body", dataType = "User", dataTypeClass = User.class, required = true)
    })
    public ResponseVO<Integer> insert(@RequestBody User user) {
        userMapper.insert(user);
        return ResponseVO.success(1);
    }

    @GetMapping("/delete")
    @Anonymous
    @ApiOperation(value = "删除数据", notes = "删除数据")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "id", paramType = "query", dataType = "String", required = true)
    })
    public ResponseVO<Integer> insert(String id) {
        return ResponseVO.success(userMapper.deleteById(id));
    }

    @PostMapping("/search")
    @Anonymous
    @ApiOperation(value = "搜索数据", notes = "搜索数据")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "dto", value = "搜索请求实体", paramType = "body", dataType = "QueryUserDTO", dataTypeClass = QueryUserDTO.class, required = true)
    })
    public ResponseVO<EsPageInfo<User>> search(QueryUserDTO dto) {
        LambdaEsQueryWrapper<User> wrapper = new LambdaEsQueryWrapper<>();
        //排序 年龄降序
        wrapper.orderByAsc(User::getAge);
        //查询 姓名
        wrapper.like(User::getName, dto.getName());
        //返回值
        return ResponseVO.success(userMapper.pageQuery(wrapper, dto.getPageNum(), dto.getPageSize()));
    }
}

7.添加启动类注解@EsMapperScan,扫描MyUserMapper 类所在的包

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@MapperScan("com.it.test.mapper")
@Slf4j
@EsMapperScan("com.it.test.esmapper")
public class SpringbootTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootTestApplication.class, args);
       
    }

es6对浏览器版本要求_User_20

es6对浏览器版本要求_User_21

es6对浏览器版本要求_User_22

es6对浏览器版本要求_ci_23