elasticsearch 学习笔记

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框架

  1. 首先引入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>
  1. 在配置文件中定义elasticsearch 相关配置
spring:
	elasticsearch:
		bboss:
			default :
				  name: default
			      elasticPassword:
			      elasticUser:
			      elasticsearch:
			          dateFormat: yyyy.MM.dd
			          discoverHost: false
			          rest:
			            hostNames: ip+端口号
  1. 定义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();
    }

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值