ElasticSearch
服务安装
Linux下安装
1-创建用户
添加组 groupadd elk
用户名 elk 密码 elk
添加用户密码 useradd elk -g elk -p elk
移动文件到新增的用户的根目录 例: /home/elk/
赋予文件权限
chown -R elk:elk elasticsearch
2-配置java_home
执行java -verbose
找到最后,就是安装的目录
修改 /etc/profile
添加 export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.144-0.b01.el7_4.x86_64
执行 source /etc/profile
如果是7.x以上的版本
默认使用elasticsearch自带的jdk
vim elasticsearch/bin/elasticsearch-env
添加 ES_JAVA_HOME=/elasticsearch/jdk
3-配置启动参数
配置参数1
编辑 /etc/security/limits.conf
追加
* soft nofile 65536
* hard nofile 65536
重新登录用户
配置参数2
编辑 /etc/sysctl.conf
最后一行添加
vm.max_map_count=262144
执行 /sbin/sysctl -p
配置yml文件参数
编辑elasticsearhc.yml
末尾添加
http.cors.enabled: true http.cors.allow-origin: "*"
xpack.security.enabled: false 防止kinban 报错
4-启动命令
./bin/elasticsearh 前台启动
./bin/elasticsearch -d 后台启动
访问http://[host]:9200 看是否启动成功
5-安装插件
下载ik 分词器
上传到elasticsearch /plugins/下
bin/elasticsearch-plugins install …/plugins/ik 插件
查看插件
./elastiscearch-plugins list
重启服务
6-安装elasticseach-head
cd项目根目录,运行命令
npm install
npm run start
创建项目
1-依赖引用
<properties>
<java.version>1.8</java.version>
<springfox-swagger2-version>2.9.2</springfox-swagger2-version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!--分词-->
<dependency>
<groupId>com.janeluo</groupId>
<artifactId>ikanalyzer</artifactId>
<version>2012_u6</version>
<exclusions>
<exclusion>
<artifactId>lucene-sandbox</artifactId>
<groupId>org.apache.lucene</groupId>
</exclusion>
<exclusion>
<artifactId>lucene-queryparser</artifactId>
<groupId>org.apache.lucene</groupId>
</exclusion>
<exclusion>
<artifactId>lucene-queries</artifactId>
<groupId>org.apache.lucene</groupId>
</exclusion>
<exclusion>
<artifactId>lucene-core</artifactId>
<groupId>org.apache.lucene</groupId>
</exclusion>
<exclusion>
<artifactId>lucene-analyzers-common</artifactId>
<groupId>org.apache.lucene</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.78</version>
</dependency>
<!--swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${springfox-swagger2-version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${springfox-swagger2-version}</version>
</dependency>
<!-- 2、swagger优化UI界面1 -->
<!-- 请求地址为:http://localhost:8080/doc.html -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
<!-- 4、swagger优化UI界面3 -->
<!--请求地址为:http://localhost:8080/docs.html -->
<!-- <dependency>-->
<!-- <groupId>com.github.caspar-chen</groupId>-->
<!-- <artifactId>swagger-ui-layer</artifactId>-->
<!-- <version>1.1.3</version>-->
<!-- </dependency>-->
</dependencies>
2- Elasticsearch 的配置文件
@Configuration
public class ElasticsearchConfig {
@Value("${el.host}")
private String host;
@Value("${el.port}")
private Integer port;
@Bean
public RestHighLevelClient restHighLevelClient() {
return new RestHighLevelClient(
RestClient.builder(
new HttpHost(host, port, "http")
)
);
}
}
使用http请求时会出现跨域,可在yml文件中配置以下内容
#跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
#服务端口
server:
port: 9111
#elasticsearch的本地地址及端口
el:
host: localhost
port: 9200
3-Swagger页面配置
@Configuration
@EnableSwagger2
public class Swagger2Config {
/**
* swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等
*
* @return Docket
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
// 为当前包路径
.apis(RequestHandlerSelectors.basePackage("包.controller"))
.paths(PathSelectors.any())
.build();
}
/**
* api文档的详细信息函数,注意这里的注解引用的是哪个
*
* @return
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
// //大标题
.title("ES RESTful API")
// 版本号
.version("0.0.1-SNAPSHOT")
// 描述
.description("API 描述")
//作者
.build();
}
}
4-系统启动配置
在application启动类上添加注解
@EnableElasticsearchRepositories
5-配置实体类
1-添加@Document注解中createIndex 默认是启用的(可以在系统启动时自动创建索引)
2-字段注解@Field(analyzer = 分词器, type = FieldType.Text, searchAnalyzer = 搜索分词器)
3-如果添加@Document注解启动报错说不存在索引时,检查字段上的Filed注解中type字段
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "testdoc", createIndex = false)
@ToString
@ApiModel
public class TestBean implements Serializable {
@Id
@ApiModelProperty(value = "编号")
private Long id;
@Field(analyzer = "ik_smart", type = FieldType.Text, searchAnalyzer = "ik_smart")
@ApiModelProperty(value = "名称")
private String name;
@Field(analyzer = "ik_smart", type = FieldType.Text, searchAnalyzer = "ik_smart")
@ApiModelProperty(value = "描述")
private String desc;
}
6-配置elastic查询层
可继承springframework下的CrudRepository<实体,主键>,部分语法与jpa相似。
@Repository
public interface TestMapper extends CrudRepository<TestBean, Long> {
List<TestBean> findAllByDescIsLike(String name);
List<TestBean> findByNameOrDesc(String name, String desc);
}
7-服务业务层
此处可以自己填写自己的
8-使用分词器
在resource文件夹下添加IKAnalyzer.cfg.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<!--<entry key="ext_dict">local.dic;</entry>-->
<!--用户可以在这里配置自己的扩展停止词字典 -->
<!--<entry key="ext_stopwords">stop.dic;</entry>-->
</properties>