ElasticSearch8-使用教程

x33g5p2x  于2022-04-23 转载在 ElasticSearch  
字(4.9k)|赞(0)|评价(0)|浏览(1075)

ElasticSearch8的改变

速度、扩展和相关性
速度、扩展和相关性方面进入了一个全新的 Elastic 8.0 时代,减少内存使用(从而让每个节点托管更多的数据),降低查询开销(在大规模部署中成效尤为明显),引入一些全新的功能来提高相关性。
通过原生矢量搜索提高搜索相关性

Elastic 8.0 版引入了一整套原生矢量搜索功能,让客户和员工能够使用他们自己的文字和语言来搜索并收到高度相关的结果。

在 Elasticsearch 8.0 版中,我们将对自然语言处理 (NLP) 模型的原生支持直接引入了 Elasticsearch,让矢量搜索功能更容易实现。此外,Elasticsearch 8.0 版还包含了对近似最近邻 (ANN) 搜索的原生支持,因此可以快速且大规模地比较基于矢量的查询与基于矢量的文档语料库。
强大的 NLP 功能打开全新的分析世界
Elasticsearch 始终是执行 NLP 的理想之选,但过去它需要在 Elasticsearch 之外进行一些处理,或编写一些相当复杂的插件。在 8.0 版中,用户现在可以直接在 Elasticsearch 中执行命名实体识别、情感分析、文本分类等,而无需使用额外的组件或进行编码。在 Elasticsearch 中原生计算和创建矢量,不仅在水平可扩展性方面取得了“胜利”(通过在服务器集群中分布计算资源来实现),这一变化还为 Elasticsearch 用户显著节省了时间和精力。

在 Elastic 8.0 版中,用户可以直接在 Elasticsearch 中使用 PyTorch Machine Learning 模型(如 BERT),并在 Elasticsearch 中原生使用这些模型执行推理。这些模型可以是您自己的定制模型,也可以是在 Hugging Face 等资源库中向社区发布的模型。

通过支持用户直接在 Elasticsearch 中执行推理,将强大的现代 NLP 功能整合到搜索应用程序和体验变得比以往更加容易(想想看:无需编码),本质上更加高效(得益于 Elasticsearch 的分布式计算功能),而且 NLP 本身的速度也会显著加快,因为您无需将数据移动到单独的进程或系统中。
快速、大规模搜索
因为 Elastic 8.0 版是基于 Lucene 9.0 开发的,那些利用现代 NLP 的搜索体验,都可以借助(新增的)对近似最近邻搜索的原生支持,快速且大规模地实现。通过 ANN,可以快速并高效地将基于矢量的查询与基于矢量的文档语料库(无论是小语料库、大语料库还是巨型语料库)进行比较。
重要更新
(1)Rest API相比较7.x而言做了比较大的改动(比如彻底删除_type),为了降低用户的升级成本,8.x会暂时的兼容7.x的请求。
(2)默认开启安全配置(三层安全),并极大简化了开启安全需要的工作量,可以这么说:7.x开启安全需要10步复杂的步骤比如CA、证书签发、yml添加多个配置等等,8.x只需要一步即可)。
(3)存储空间优化:更新了倒排索引,对倒排文件使用新的编码集,对于keyword、match_only_text、text类型字段有效,有3.5%的空间优化提升,对于新建索引和segment自动生效。
(4)优化geo_point,geo_shape类型的索引(写入)效率:15%的提升。
(5)新特性:支持上传pyTorch模型,在ingest的时候使用。比如在写入电影评论的时候,如果我们想要知道这个评论的感情正负得分,可以使用对应的AI感情模型对评论进行运算,将结果一并保存在ES中。
(6)技术预览版KNN API发布,(K邻近算法),跟推荐系统、自然语言排名相关。之前的KNN是精确搜索,在大数据集合的情况会比较慢,新的KNN提供近似KNN搜索,以提高速度。
(7)对ES内置索引的保护加强了:elastic用户默认只能读,如果需要写权限的时候,需有allow_restrict_access权限
运行条件
需要 Java 17 才能运行 Elasticsearch。

安装ElasticSearch和kibana

下载地址: https://www.elastic.co/cn/downloads/?elektra=home&storm=hero

ElasticSearch要和kibana的版本一致

linux安装和在windows上安装都一样:

  1. 解压压缩包
  2. 启动ElasticSearch和kibana的启动脚本(bat或者sh) 都在bin目录下

我这里就不使用Linux了,就在本机windows安装

因为在8.+增加了默认安全的设置,第一次启动会有es的账户密码和Kibana许可证

启动es后,在关闭es,这时候配置文件就被增加关于安全的默认值了,我们需要将安全设置给全部关闭了,去config/elasticsearch.yml 修改下面参数(有的就修改,没有就添加)

http.cors.enabled: false   
http.cors.allow-origin: "*"   
http.cors.allow-headers: Authorization
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
xpack.security.http.ssl:
	enabled: false
xpack.security.transport.ssl:
	enabled: false

在遇到了下面问题,那么还是遵循上面的步骤解决

received plaintext http traffic on an https chann el, closing connection Net

修改es的bin/jvm.options文件,默认为4G占用内存,改为1G(本地使用)

-Xms1g
-Xmx1g

如果启动的时候出现了报错或者闪退那么可以到logs/elasticsearch.log里查看错误信息

操作ElasticSearch(crud)

进行入开发者工具中

索引

创建索引(结构化方式)
PUT /employee
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "age": {
        "type": "integer"
      }
    }
  }
}
查询指定索引映射信息
GET /employee/_mappings
删除指定索引
DELETE /employee

添加或修改

给索引添加或者修改一条数据

语法:
POST /index1/_doc/文档的id
文档id就相当于数据库的行id

post /employee/_doc/2
{
  "name":"hu1",
  "age":23,
  "time":"2020-09-01"
}

_doc 自适应: 如果存在那么就是修改,如果不存在那么就是添加

_update 修改
_create 添加 ,如果存在,则失败

当然也可以不指定文档id,会自分配的

删除

删除指定文档
DELETE /employee/_doc/1

查询

查询集群健康
GET _cluster/health

green:主分片与副本都正常分配
yellow:主分片全部正常分配,有副本分片未能正常分配
red:有主分片未能分配,当服务器的磁盘容量超过85%时创建了一个索引

查询es中所有索引内的信息
GET _search
{
  "query": {
    "match_all": {}
  }
}
查询指定索引内的信息
GET /employee/_search
{
  "query": {
    "match_all": {}
  }
}

分页查询指定索引内的信息
GET /employee/_search
{
  "query": {
    "match_all": {}
  },
  "from": 0,
  "size": 1
}

from: 起始值
size: 查询多少条

查询指定文档
GET /employee/_doc/1
复杂查询
查询指定属性

查询name是牛顿的相关分词数据

GET /employee/_search
{
  "query": {
    "match": {
      "name": "牛顿"
    }
  }
}
指定属性排序

查询name是牛的相关分词数据,并且以年龄倒序

GET /employee/_search
{
  "query": {
    "match": {
      "name": "牛"
    }
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}
属性过滤(where)

term针对查询不会进行分词操作

查询年龄是30的

GET /employee/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "age": 30
          }
        }
      ]
    }
  }
}
聚合查询

查询name是牛的相关分词,并且以age聚合求出相关年龄有多少人

GET /employee/_search
{
  "query": {
    "match": {
      "name": "牛"
    }
  },
  "aggs": {
    "group_by_age": {
      "terms": {
        "field": "age"
      }
    }
  }
}

添加ik分词器

安装ik分词器

注意: 要和es的版本一致 ,否则启动es会报错

下载地址 : https://github.com/medcl/elasticsearch-analysis-ik/releases

镜像加速: https://gitcode.net/mirrors/medcl/elasticsearch-analysis-ik

linux和windows都一样,在plugins目录下将下载的elasticsearch-analysis-ik.xx.zip文件解压修改文件名称为ik文件

重启elasticsearch

使用ik分词器创建索引

ik_max_word 是最大分词 ,ik_smart是最小分词

注意: ik分词器只适用于text文本类型的字段

PUT /employee
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      },
      "age": {
        "type": "integer"
      }
    }
  }
}

点赞 -收藏-关注-便于以后复习和收到最新内容有其他问题在评论区讨论-或者私信我-收到会在第一时间回复如有侵权,请私信联系我感谢,配合,希望我的努力对你有帮助^_^

相关文章