elasticsearch 简写:ELK
参考文档https://blog.csdn.net/daerzei/article/details/79761086
根据上面的理解一下。我是失败了!
首先下载elasticsearch wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.1.tar.gz
链接可能会过期!去官网获取链接!https://artifacts.elastic.co/downloads/elasticsearch
解压 tar -zvxf elasticsearch-6.1.1.tar.gz
放到你喜欢的位置。
我在/usr/local/创建了elasticsearch文件夹,并elasticsearch-6.1.1解压缩文件放进来
修改配置文件cd config
vim elasticsearch.yml
这几句配置写上或取消注释:
cluster.name: my-application
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["39.108.126.143:9300"] (这是集群用的,可以不改)
好,接下来启动
去bin目录下启动sh elasticsearch
一定报错!
启动成功后
用postman测试get请求链接http://你的服务器地址:9200/
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
不能用root用户来启动,需要切换用户
没有的话添加用户
useradd es(随便写但要记得)
passwd es(随便写但要记得)输入两次密码
chown -R es:es /export/servers/elasticsearch(给elasticsearch下所有文件赋予权限:es用户(上面你自己取的名字)才有权限)
max virtual memory areas vm.max_map_count [65530] is too low, increase to
解决方案:切换到root用户 su root
vi /etc/sysctl.conf
添加:vm.max_map_count=655360
sysctl -p
重启。好,少了一个错误。
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
max number of threads [1024] for user [lishang] likely too low, increase to at least [2048]
vi /etc/security/limits.conf
添加如下内容:是添加!不是修改!!
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
重启,又少了个错误。
好的,现在重启成功!
如果有其他错误
参考错误集合:
http://www.cnblogs.com/hadoop2015/archive/2018/08/04/9420287.html
下面开始结合SpringBoot2.0,做下基本操作
首先你是不是得配置?(这里使用配置文件的配置)ok,先配置
#节点名字,默认elasticsearch
spring.data.elasticsearch.cluster-name=my-application
#节点地址,多个节点用逗号隔开(java客户端是9300,http端是9200)
spring.data.elasticsearch.cluster-nodes=xx.xxx.xx.xx:9300
spring.data.elasticsearch.repositories.enable=true
不懂ELK的可以先去看我的ELK整合总结。elk其实是一个Document文本,我理解为可快速查阅的一本书。所谓数据操作,就是创建一个Document或者是在某Document中进行操作。太多了,不懂的看我ELK文档整合
创建一个实体类
创建一个
@Document(indexName = "user", type = "userInfo", refreshInterval = "0s")
public class User {
@Id
private String id;
private String username;
以下省略...}
好,要创建Document得有个链接,然后放进去是不是?
依赖
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<!-- <version>3.0.9</version> -->
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
第一种 javaJPA
跟springboot全注解开发,mybaits-puls一样。简单!没学过jpa的同学不要慌,看下去就会了
创建dao接口类(理解为写mysql的dao接口就好啦,然后有个语法规则
举例:queryUserById=翻译为:根据id去user查询 也就是:去user文档节点根据id去查询,最终会编译成一个elk查询语句!)
@Component
public interface UserRepository extends ElasticsearchRepository<User,String(与id同类型)> {
User queryUserById(String id);
}
写完之后controller调用 UserRepository就行
第二种 BoolQueryBuilder
BoolQueryBuilder builder =new BoolQueryBuilder();
builder.must(QueryBuilders.fuzzyQuery("username", "xx"));
往builder组装条件(不懂去查api)...
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
//将搜索条件设置到构建中
nativeSearchQueryBuilder.withQuery(builder);
//生产NativeSearchQuery
NativeSearchQuery query = nativeSearchQueryBuilder.build();
最后返回就行userRepository.search(query)
第三种 不推荐
有个Template,自己去查吧。。。不喜欢