• ElasticSearch实操入门(四)


    一、ElasticSearch安装

            从ES 7.x版本开始,其发行的安装包中就已经内置了JDK。如果用户对JDK有独特的要求,可以修改其启动脚本进行依赖配置。

            从Download Elasticsearch | Elastic下载,解压安装文件,进入到解压后到文件夹,我们可以看到:

            目录        作用
            bin存放ES启动、关闭等脚本文件
            confES配置文件所在的目录
            jdkES自带的JDK目录
            libES运行所需要的jar目录
            logs存储ES的运行日志
            modules存储ES已安装的模块
                    plugins        存储ES已安装的插件

            出于安全性考虑,ES不允许用root账户启动,应创建其他账户启动ES。在默认情况下,配置文件中ES进程占用的内存为1GB。如果计算机的内存较小,需要更改config/jvm.options配置文件,修改其中的-Xms和-Xmx参数值到合适的值即可。

    ES启动:

    1. 当前会话启动:bin/elasticsearch
    2. 后台运行启动:bin/elasticsearch -d
    3. docker 启动:docker run -d -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.13.2

    查看日志:tail -f logs/elasticsearch.log

            当ES启动后,在其安装目录下会增加一个data目录,该目录主要用于存储索引数据文件。

    启动完之后,我们可以通过curl http://127.0.0.1:9200 进行验证,其结果如下:

    1. {
    2. "name" : "7f78345d924a",
    3. "cluster_name" : "docker-cluster",
    4. "cluster_uuid" : "_NTwWUjwT2OHa9s2zHWXfw",
    5. "version" : {
    6. "number" : "7.13.2",
    7. "build_flavor" : "default",
    8. "build_type" : "docker",
    9. "build_hash" : "4d960a0733be83dd2543ca018aa4ddc42e956800",
    10. "build_date" : "2021-06-10T21:01:55.251515791Z",
    11. "build_snapshot" : false,
    12. "lucene_version" : "8.8.2",
    13. "minimum_wire_compatibility_version" : "6.8.0",
    14. "minimum_index_compatibility_version" : "6.0.0-beta1"
    15. },
    16. "tagline" : "You Know, for Search"
    17. }

    其中:

    • name为当前ES的实例名称,默认取值是当前服务器的主机名。
    • cluster_name为集群的名称,该项在配置文件中的默认值即为elasticsearch         

            当在同一个网络中部署多个ES集群时,将依靠cluster_name的值作为集群的唯一标识,各节点只有和集群下的其他节点的cluster_name值一致才能加入该集群中。在这种情况下,不同的集群节点需要将cluster_name的值定义为不同的名称。version内为当前集群版本及使用的Lucene组件等版本信息。

    集群模式安装

    集群模式可以增强ES集群的服务性能或提升其高可用性,假设这3台计算机的IP地址分别为192.168.0.1、192.168.0.2和192.168.0.3,名称分别为es1、es2和es3,需要在这3台计算机上创建除root外的用户进行集群的搭建。

    修改3台计算机的config/elasticsearch.yml文件。

    在es1上需要修改的文件内容如下:

    在es2上需要修改的文件内容如下:

    在es3上需要修改的文件内容如下:

    更改各节点配置后,可以按照任意顺序在3台计算机上运行bin/elasticsearch -d命令启动实例

    执行curl http://192.168.0.1:9200/_cat/nodes?v命令,可以查看集群节点信息:

            返回的信息中主要描述了当前集群中各个节点的IP地址及CPU的内存负载情况,另外还包括节点角色信息,其中,es1目前是集群中的master节点。ES集群中的master节点是由集群自动选举完成指派的,不需要额外指定。当然,如果用户对某些节点的角色有特殊的要求,可以更改config/elasticsearch.yml文件中的node.master或者node.data选项来完成配置。 

     二、创建索引

    比如我们建立一个旅馆的索引hotel:

    • 对于旅馆标题来说,需要按照用户输入的关键词进行模糊搜索,因此应该定义成文本(text)型;
    • 对于所属城市来说,只需进行相等与否的判断,定义成普通的关键词类型(keyword)即可;
    • 对于房价来说,只需进行大小比较的判断,因此定义成数值中的双精度浮点型。

    假设使用默认的分片数和副本数,整体的索引创建语句如下:

    1. curl -H ‘Content-Type: application/json’ -XPUT http://127.0.0.1:9200/hotel -d ’{
    2. “mappings”:{
    3. “properties”:{
    4. “title”:{“type”:”text”},
    5. “city”:{“type”:”keyword”},
    6. “price”:{“type”:”double”}
    7. }
    8. }
    9. }’

    Content-Type:application/json描述的是本次请求向目标URL传递JSON形式的参数

    -XPUT是告诉服务方本次的请求类型为PUT

    URL最后面的hotel就是将要创建的索引名称

    为了简单起见,大家可以使用kibana的Dev Tools进行语句的操作,比如:

    1. PUT /hotel
    2. {
    3. “mappings”:{
    4. “properties”:{
    5. “title”:{“type”:”text”},
    6. “city”:{“type”:”keyword”},
    7. “price”:{“type”:”double”}
    8. }
    9. }
    10. }

    三、写入文档

    在索引中创建了一条ID为001的文档:

    1. POST /hotel/_doc/001
    2. {
    3. "title":"java旅馆",
    4. "city":"深圳",
    5. "price":50.00
    6. }

    四、根据_id搜索文档

    GET /hotel/_doc/001

     查询返回的结果中包括搜索的一些元数据,如是否找到、索引名称、文档ID值、文档版本等,在_source中展示了命中的文档的原始数据

    五、根据一般字段搜索文档

    在ES中进行搜索时需要用到query子句,其请求形式如下:

    1. GET /${index_name}/_search
    2. {
    3. "query":{
    4. ...
    5. }
    6. }

             query子句可以按照需求填充查询项。假设按照城市进行搜索,把旅馆文档搜索出来。因为只需要进行文本是否相等的判断,所以需要用到term搜索:

    1. GET /hotel/_search
    2. {
    3. "query":{
    4. "term":{
    5. "price":{"value":50.00}
    6. }
    7. }
    8. }

     六、根据文本字段搜索文档

    如果要对文本进行模糊匹配并给出匹配分数,可以使用match搜索对某个字段进行模糊匹配,比如按照标题进行模糊搜索:

    1. GET /hotel/_search
    2. {
    3. "query":{
    4. "match":{"title":"java"}
    5. }
    6. }

    此时ES对结果进行了打分计算,此处使用的是对文本打分计算的算法

  • 相关阅读:
    【IDEA项目个别类爆红,但是项目可以正常运行】
    GoWeb 的 MVC 入门实战案例,基于 Iris 框架实现(附案例全代码)
    164_技巧_Power Query 之巧解-外部表不是预期的格式
    金仓数据库KingbaseES客户端编程开发框架-Hibernate(4. Hibernate编程指南)
    卡尔曼家族从零解剖-(02)贝叶斯滤波-知其所以然
    mac安装java
    二叉树的OJ题——C++
    基于Java+SpringBoot+Thymeleaf+Mysql失物招领网站平台系统设计与实现
    使用匿名函数 回调函数处理字符串
    PyTorch 中的【高级索引】 或 【花式索引】
  • 原文地址:https://blog.csdn.net/ntzzzsj/article/details/126029242