CentOS系列之Elasticsearch

简介

Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库–无论是开源还是私有。

但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。

Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。

然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:

  • 一个分布式的实时文档存储,每个字段 可以被索引与搜索
  • 一个分布式实时分析搜索引擎
  • 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据

Elasticsearch 将所有的功能打包成一个单独的服务,这样你可以通过程序与它提供的简单的 RESTful API 进行通信, 可以使用自己喜欢的编程语言充当 web 客户端,甚至可以使用命令行(去充当这个客户端)。

就 Elasticsearch 而言,起步很简单。对于初学者来说,它预设了一些适当的默认值,并隐藏了复杂的搜索理论知识。 它 开箱即用 。只需最少的理解,你很快就能具有生产力。

随着你知识的积累,你可以利用 Elasticsearch 更多的高级特性,它的整个引擎是可配置并且灵活的。 从众多高级特性中,挑选恰当去修饰的 Elasticsearch,使它能解决你本地遇到的问题。

安装Elasticsearch

安装 Elasticsearch 之前,你需要先安装一个较新的版本的 Java,最好的选择是,你可以从 www.java.com 获得官方提供的最新版本的 Java。之后,你可以从 elastic 的官网 elastic.co/downloads/elasticsearch 获取最新版本的 Elasticsearch。

  • 第一步:安装Java
[root@VM_140_90_centos data]# yum install -y java; java -version
  • 第二步:安装GPG key
[root@VM_140_90_centos data]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
  • 第三步:安装Elasticsearch
[root@VM_140_90_centos data]# rpm -ivh https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.0.rpm
  • 第四步:修改配置文件
[root@VM_140_90_centos data]# cat >/etc/elasticsearch/elasticsearch.yml<<EOF 
    cluster.name: elk-cluter
    node.name: linux-node1
    path.data: /data/elasticsearch
    path.logs: /var/log/elasticsearch/
    bootstrap.mlockall: true
    network.host: 0.0.0.0  # 生产环境尽量不要这样配
    http.port: 9200
EOF
  • 第五步:授权目录
[root@VM_140_90_centos data]# chown -R elasticsearch.elasticsearch /data/elasticsearch
  • 第六步:启动
[root@VM_140_90_centos data]# /etc/init.d/elasticsearch start
Starting elasticsearch (via systemctl):                    [  OK  ]
  • 第七步:查看运行状态
[root@VM_140_90_centos data]# systemctl status elasticsearch

curl 'http://localhost:9200/?pretty'
  • 第八步:安装中文分词
/usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip

ES默认的分词器为standard,想要改变默认分词器为ik分词器,可以在config/elasticsearch.yml文件中添加如下配置即可:
index.analysis.analyzer.default.type:ik
好,到此Elasticsearch就安装成功啦

开始操作Elasticsearch

以下操用postman来完成 初学者不建议用图形界面

  • 请求参数介绍
    curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
参数 解释
VERB 请求方式:GET, POST, PUT, HEAD, DELETE
PROTOCOL http或者https协议
HOST Elasticsearch集群中的任何一个节点的主机名
PORT 端口(默认:9200)
PATH API路径
QUERY_STRING 一些可选的查询请求参数
BODY 一个JSON格式的请求主体

索引

  • 创建索引
    PUT http://47.94.202.140:9200/chzhao
    解释:用PUT请求方式向http://47.94.202.140:9200服务器创建一个名为chzhao的索引
    返回数据:
{
  "acknowledged": true,
  "shards_acknowledged": true,
  "index": "chzhao"
}

实例:
这里写图片描述

注:索引在添加数据的时候是可以自动创建的。如果你想禁止自动创建索引,你 可以通过在config/elasticsearch.yml的每个节点下添加下面的配置:

action.auto_create_index: false

我们会在之后讨论你怎么用 索引模板 来预配置开启自动创建索引。这在索引日志数据的时候尤其有用:你将日志数据索引在一个以日期结尾命名的索引上,子夜时分,一个预配置的新索引将会自动进行创建。

  • 删除索引
    DELETE http://47.94.202.140:9200/chzhao
    解释:用DELETE请求方式向http://47.94.202.140:9200服务器删除一个名为chzhao的索引
    返回数据:
{
  "acknowledged": true
}

实例:
删除索引

你也可以这样删除多个索引

DELETE /index_one,index_two
DELETE /index_*

也可以删除所有索引

DELETE /_all
DELETE /*

对一些人来说,能够用单个命令来删除所有数据可能会导致可怕的后果。如果你想要避免意外的大量删除, 你可以在你的 elasticsearch.yml 做如下配置:

action.destructive_requires_name: true

这个设置使删除只限于特定名称指向的数据, 而不允许通过指定 _all 或通配符来删除指定索引库。

  • 索引设置

    Elasticsearch 提供了优化好的默认配置。 除非你理解这些配置的作用并且知道为什么要去修改,否则不要随意修改。

    • 下面是两个 最重要的设置:

      • number_of_shards
        每个索引的主分片数,默认值是 5 。这个配置在索引创建后不能修改。
      • number_of_replicas
        每个主分片的副本数,默认值是 1 。对于活动的索引库,这个配置可随时修改。
        我们来操作修改一下:
        这里写图片描述
        我们来尝试修改一下副分片:
        这里写图片描述

好!索引暂时说到这里。

文档(表)基本操作

程序中大多的实体或对象能够被序列化为包含键值对的JSON对象,键(key)是字段(field)或属性(property)的名字,值(value)可以是字符串、数字、布尔类型、另一个对象、值数组或者其他特殊类型,比如表示日期的字符串或者表示地理位置的对象。

  • 文档元数据
节点 解释
_index 索引
_type 文档
_id 文档ID

- 创建文档
URL:PUT http://47.94.202.140:9200/chzhao/
数据:

{
    "mappings":{
        "person":{
            "properties":{
                "name":{
                    "type":"text", // 类型
                    "analyzer":"ik_max_word", // 指定分词器
                    "search_analyzer":"ik_max_word" //设置搜索时的分词器,默认跟ananlyzer是一致的,比如index时用standard+ngram,搜索时用standard用来完成自动提示功能 },
                "desc":{
                    "type":"text",
                    "analyzer":"ik_max_word",
                    "search_analyzer":"ik_max_word" }
            }
        }
    }
}

解释:我们这里创建了一个person的新文档,里面有两个字段,分别是:name(text类型),desc(text类型)

实例:
这里写图片描述

  • 添加数据

URL:PUT http://47.94.202.140:9200/chzhao/person/1
数据:

{
    "name":"张三",
    "desc":"PHP工程师"
}

解释:添加一条数据

如果你仔细看,会发现请求路径是/chzhao/person/1,最后的1是该条记录的 Id。它不一定是数字,任意字符串(比如abc)都可以。

实例:
这里写图片描述

新增记录的时候,也可以不指定 Id,这时要改成 POST 请求。

实例:
这里写图片描述

注意,如果没有先创建 Index(这个例子是chzhao),直接执行上面的命令,Elastic 也不会报错,而是直接生成指定的 Index。所以,打字的时候要小心,不要写错 Index 的名称。

  • 查看文档(这里只做简要查询,干货还在后面额)
    /Index/Type/Id发出 GET 请求,就可以查看这条记录。
    返回的数据中,found字段表示查询成功,_source字段返回原始记录。
    实例:
    这里写图片描述

  • 删除文档
    删除记录就是将查询的请求换成 DELETE 请求。自己测试一下

  • 更新文档
    更新记录就是使用 PUT 请求,重新发送一次数据。
    这里写图片描述

数据查询操作

  • 返回所有记录
    使用 GET 方法,直接请求/Index/Type/_search,就会返回所有记录。
    实例:
    这里写图片描述
    上面代码中,返回结果的 took字段表示该操作的耗时(单位为毫秒),timed_out字段表示是否超时,hits字段表示命中的记录,里面子字段的含义如下。

    • total:返回记录数,本例是2条。
    • max_score:最高的匹配程度,本例是1.0。
    • hits:返回的记录组成的数组。

返回的记录中,每条记录都有一个_score字段,表示匹配的程序,默认是按照这个字段降序排列。

  • 全文搜索(条件查询)
    1、查询字符串搜索非常适用于通过命令行做即席查询。例如,查询在 person 类型中desc 字段包含 运维 单词的所有文档:
    这里写图片描述

2、这个简单搜索返回包含 person 的所有文档:
这里写图片描述

史上最全的Elasticsearch查询

猜你喜欢

转载自blog.csdn.net/qq_33261700/article/details/80927553