f直接下载安装包解压 修改config文件夹 中的jvm.options配置文件
原配置文件的初始化 大小是1个G
-Xms1g
-Xmx1g
直接修改为
-Xms256m
-Xmx256m
解压后的文件夹相关作用
mac 启动命令
切换到bin 目录下输入 ./elasticsearch -d命令 回车
然后访问localhost:9200
在浏览器返回类似数据就表示启动成功了
下载elasticsearch-head 的web端操作页面插件
下载地址https://github.com/mobz/elasticsearch-head
下载项目后初始化依赖 (需要有node环境)
cnpm install
启动
num run start
启动后发现无法链接本地的elasticsearch 因为web项目和elasticsearch-head的端口不一致,导致跨域.设置elasticsearch.yml 配置文件中允许跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
链接成功以后 的页面为
新建索引
相当于新建数据库
Kibana 一个es的数据搜索、展示等多功能的工具
下载地址
链接: 下载地址
根据自己的es的版本 下载对应的 kibana版本,版本号要一致
解压后进入目录使用命令启动
bin/kibana
启动时候有可能会出现各种问题,直接设置文件夹的权限就行了
sudo chown -R xxx 文件夹
成功启动后 访问地址
链接: 访问地址
点击目录
跳转测试工具
es 和mysql的区别类型
设置中文界面
设置 kibana 中的config文件夹下kibana.yml 配置文件
#i18n.locale: "en"
i18n.locale: "zh-CN"
ik 分词器
链接: 下载ik 分词器地址
下载es版本对应的ik分词器插件
然后在es的plugins文件夹中新建ik (自定义文件夹名称) 然后解压
注意一定要下载 zip格式的文件
下载其他版本的文件会导致启动es失败!因为其他的文件夹内容不齐全.
解压之后重启es、kibana、elasticsearch-head 等就可以了.
可以使用 es 里面的插件命令查询已加载的所有插件
bin/elasticsearch-plugin list
ik_smart 最少切分 就是直接将单词进行保存,不进行切分,开始下标从0到5
ik_max_word 最细粒度切分
会将单词按照下标索引进行划分.
字典
当我们想要搜索的词被没有被组合放在一起,就没办法实现搜索功能,此时需要我们自己将需要查询的内容放到分词器字典中
配置地址
/usr/local/elasticsearchAll/elasticsearch-7.10.2/plugins/ik/config
以下是ik分词器自带的字典文件(dic)和配置文件(cfg.xml),从业务逻辑上来说肯定是不够用的
如果我们要添加自定义的字典文件,只需要自定义一个字典文件并添加到IKAnalyzer.cfg.xml 配置文件中
比如
cezhangsan.dic是我们自定义的字典文件
修改IKAnalyzer.cfg.xml 如下样式编辑
重启es以后 在启动日志里面可以看见自定义的字典被加载
重新请求接口以后分词字典将我们维护的字典数据,拆分成了一个词条
es实现同义词搜索功能
比如搜索 奶茶的时候,搜索结果中包含 蜜雪冰城 、喜茶、coco等奶茶品牌名称。
最基本的增删改查接口请求
新建索引
在网页中查询
字段类型
创建一个指定数据类型的索引
当设置类型为_doc的时候 ,es默认自动设置类型
只是名字被设置成了不可分隔的关键词.
扩展命令 通过_cat 命令 可以查看一些默认的配置
GET _cat/indices
GET _cat/aliases
GET _cat/allocation
GET _cat/count
GET _cat/fielddata
GET _cat/health
GET _cat/indices
GET _cat/master
GET _cat/nodeattrs
GET _cat/nodes
GET _cat/pending_tasks
GET _cat/plugins
GET _cat/recovery
GET _cat/repositories
GET _cat/segments
GET _cat/shards
GET _cat/snapshots
GET _cat/tasks
GET _cat/templates
GET _cat/thread_pool
修改
简单的模糊查询
GET /test3/_doc/_search?q=name:曹操
可以根据匹配度排序
排序及分页
bool 多条件查询 对应mysql 的多条件查询 where id =1 and name =xx
should 对应的 or 关键字
GET /test3/_doc/_search
{
"query":{
"bool":{
// should 对应mysql 中的 or 查询条件 只要满足一个就返回结果
"should":[
{
"match":{
"name":"张"
}
},
{
"match":{
"age":"12"
}
}
]
}
}
}
GET /test3/_doc/_search
{
"query":{
"bool":{
// must_not 对应mysql 中的 not 查询条件
"must_not":[
{
"match":{
"age":"12"
}
}
]
}
}
}
查询某个字段存在值
POST /索引名称/_search
{
"query": {
"bool": {
"must": [
{
"exists":
{"field": "字段名称"}
}
]
}
}
}
查询修改值
POST /索引名称/_update_by_query
{
// script 更改数据的脚本 如果是数字类型 就= 设置值,字符串类型需要用单引号
"script": {
"source": "ctx._source.属性 ='需要更改的值' ",
"lang": "painless"
},
"query": {
"bool": {
"must": [
{
"ids": {
"values": [""]
}
}
//或者 用 terms 或者多个搜索条件一起,用逗号分隔 或者用must_not也是一样
// {
//"terms": {
//"tags":["xxx"]
//}
//}
]
}
}
}
当建立一个索引,因为业务需要 添加字段的时候。使用以下命令
PUT /索引名称/_mapping
{
"properties":{
"属性" : {
"type" : "字段类型"
}
}
}
同理当需要添加setting配置的时候 只需要使用命令
PUT /索引名称/_setting
{
"setting":{
"属性" : {
"type" : "字段类型"
}
}
}
注意 ,此时索引的状态如果是打开的,那么执行此命令就会失败,因为在打开的状态是不能更改settings的,那么需要先关闭索引 执行以下命令关闭索引
POST /索引名称/_close
然后再执行上面的_setting 命令 此时就会执行成功。注意不能修改
“number_of_shards”: “3”,
“number_of_replicas”: “1” 因为已经被创建了的索引不能修改这两个属性
执行完成 settings命令后自然是要再open索引
POST /索引名称/_open
推荐一个宝藏网站
mysql 直接转换成es查询语句
将自己的mysql查询逻辑写好以后放在第一个输入框,立刻获得转换好的dsl语句,再结合 bboss框架将参数替换 分分钟完成业务测试。对于不太熟悉es命令的人来说简直不要太友好了,墙裂推荐
springboot整合 elasticsearch 定义es类
@Document(indexName="books")
class Book {
@Id
private String id;
@Field(type = FieldType.text)
private String name;
@Field(type = FieldType.text)
private String summary;
@Field(type = FieldType.Integer)
private Integer price;
/**
* 当需要定义一个属性为 集合的时候 只需要将
* 字段设置为集合或者提前用命令的方式先 生成es对象
*/
@Field(type = FieldType.keyword)
private List<String> author;
}
创建对象后就需要用java代码链接es库生成索引对象。常用的es相关的 crud操作
封装的对象 spring都有 ,提供了类似 jpa的基础类如下(我当前使用的es版本是7.10)
interface BookRepository extends ElasticsearchRepository<Book, String> {
List<Book> findByNameAndPrice(String name, Integer price);
}
将Book换成自定义的es类,String 换成自定义的主键类型 。类似此种简单的查询在spring官网上也很多列子 。
spring官网相关的查询方法示例1
在java 代码中的使用方法在很多博客里面都可以搜索到,常见的代码查询方法都有,基本上是围绕 BoolQueryBuilder 、NativeSearchQuery 等类来构建查询参数 然后使用 ElasticsearchRestTemplate.search(searchQuery, Object.class); 进行查询 然后返回查询结果。
BoolQueryBuilder builder= QueryBuilders.boolQuery();
NativeSearchQuery query = new NativeSearchQueryBuilder()
// 设置查询内容
.withQuery(build)
// 分页
.withPageable(PageRequest.of((current - 1), size))
// 排序
.withSort(SortBuilders.fieldSort(sortFile).order(SortOrder.DESC))
// 高亮
// .withHighlightFields(
// new HighlightBuilder.Field(keyword))
// .withHighlightBuilder(new HighlightBuilder()
// .preTags("<span style='color:red'>")
// .postTags("</span>"))
.build();
// 此行代码会将结果转换为需要的 T 泛型对象 包括分页相关数据
org.springframework.data.elasticsearch.core.SearchHits<T> searchHits = restTemplate.search(query, T);
在业务场景中 经常会出现特定的复杂需求。就像mybatis一样 需要自定义复杂的sql,。这时使用再使用上述的基础类比较麻烦,所以就可以使用 第三方框架
bboss
bboss框架官网
在项目中是如下使用的bboss框架
- 首先引入bboss依赖
<!-- https://mvnrepository.com/artifact/com.bbossgroups.plugins/bboss-elasticsearch-spring-boot-starter -->
<dependency>
<groupId>com.bbossgroups.plugins</groupId>
<artifactId>bboss-elasticsearch-spring-boot-starter</artifactId>
<version>6.7.6</version>
</dependency>
- 在配置文件中定义elasticsearch 相关配置
spring:
elasticsearch:
bboss:
default :
name: default
elasticPassword:
elasticUser:
elasticsearch:
dateFormat: yyyy.MM.dd
discoverHost: false
rest:
hostNames: ip+端口号
- 定义bboss需要的配置类
import org.frameworkset.elasticsearch.boot.BBossESStarter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
@Configuration
public class ElasticSearchConfigurer {
@Primary
@Bean(initMethod = "start")
// 自定义的配置文件的开头
@ConfigurationProperties("spring.elasticsearch.bboss.default")
public BBossESStarter bbossESStarter(){
return new BBossESStarter();
}
}