Elasticsearch入门级知识你会了吗

194 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情

简介

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。

特性

  • 可拓展性:部署大型分布式集群(数百台服务器)技术处理PB级数据。
  • 技术整合:将全文检索、数据分析、分布式相关技术整合在一起,也可以结合商用的数据分析软件 (BI软件)和分布式数据库(mycat)
  • 部署简单:开箱即用,很多默认配置不需关心,解压完成直接运行即可。拓展时,只需多部署几个实例即可,负载均衡、分片迁移集群内部自己实施。
  • 接口简单:使用Restful Api跨语言,操作简单。
  • 功能强大: Elasticsearch作为传统数据库的一个补充,提供了全文检索,同义词处理,相关度排名的特殊功能。

应用场景

  • 关键字和全文检索
  • 海量数据进行近实时的处理,对复杂的日志进行分析
  • 数据量很大,又需要各种条件查询,实时的返回查询数据结果
  • 相似搜索,模糊匹配,地理位置聚合等

安装

下载安装包

点击链接 www.elastic.co/cn/download… 进入官网,下载对应的Elasticsearch版本。

图片.png

安装中文分词插件

在安装es/bin的目录的下执行 elasticsearch-plugin install github.com/medcl/elast… 在线安装中文分词

启动

安装成功后,运行 ES安装目录\bin\elasticsearch.bat文件,访问http://localhost:9200 如果出现如下内容,则表示ES安装成功。

图片.png

说明:安装ES的版本为7.2.0.

ES的常用命令

创建索引

采用put创建索引

基本语法

 PUT /{index}/{type}/{id}{
  "field": "value",
  ...}

请求示例

http://localhost:9200/product/book/1

{
    "skuNo":"p0001",
     "title":"三国演义",
     "price":"99.9"
}

返回信息

{
    "_index": "product",
    "_type": "book",
    "_id": "1",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 0,
    "_primary_term": 1
}

说明:

  • _index:索引名称
  • _type:类型
  • _id :ID 是一个字符串,当它和 _index 以及 _type 组合就可以唯一确定 Elasticsearch中的一个文档。
  • _version :版本号,当进行修改时,版本会新增
  • result :类型创建或者修改

查询索引所有信息

请求示例

http://localhost:9200/product/_mapping?pretty

返回信息

{
  "product" : {
    "mappings" : {
      "properties" : {
        "price" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "skuNo" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "title" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}

说明:返回索引创建的详细信息

关键字检索

请求示例

http://localhost:9200/_search?pretty

 {
    "query": 
    {
        "match":
        {
             "title":"java"
        }
    }
}

返回信息

{
    "took": 351,
    "timed_out": false,
    "_shards": {
        "total": 6,
        "successful": 6,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 2,
            "relation": "eq"
        },
        "max_score": 1.0064771,
        "hits": [

            {
                "_index": "product",
                "_type": "book",
                "_id": "2",
                "_score": 1.0064771,
                "_source": {
                    "skuNo": "p0002",
                    "title": "java编程",
                    "price": "99.8"
                }
            },
            {
                "_index": "product",
                "_type": "book",
                "_id": "3",
                "_score": 0.8292111,
                "_source": {
                    "skuNo": "p0002",
                    "title": "java并发编程",
                    "price": "99.8"
                }
            }
        ]
    }
}

说明:检索字段为title,内容为java,查询中title中包含java的所有数据。

  • took:是查询花费的时间,毫秒单位。
  • time_out:标识查询是否超时。
  • _shards:描述了查询分片的信息,查询了多少个分片、成功的分片数量、失败的分片数量等。
  • hits:搜索的结果,total是全部的满足的文档数目,hits是返回的实际数目(默认是10)。
  • _score是文档的分数信息,与排名相关度有关,参考各大搜索引擎的搜索结果,就容易理解。
  • total:1;(代表当前ES里总数只有一条数据,不管你发送任何请求,ES都会把总数返回)
  • _index:我们指定查询的索引(类似数据库的某个库)。
  • _type:我们指定查询的文档(类似数据库的某张表)
  • _id:查询指定的id。
  • _source:查询返回数据。

删除索引

请求示例

DELETE http://localhost:9200/product/book/2

返回结果

{
    "_index": "product",
    "_type": "book",
    "_id": "2",
    "_version": 2,
    "result": "deleted",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 5,
    "_primary_term": 1
}

高级查询

基本语法

GET /索引名称/_search
{
    "query":{
        "查询类型":{
            "查询条件":"查询条件值"
        }
    }
}

查询类型:match_all,match,term,range match类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是or的关系.

条件查询

{
    "query": 
    {
        "match":
        {
           "title":
             {
                "query":"java",
                "operator":"and"
             }
        }
    }
}

多字段查询

{
    "query": 
    {
        "multi_match":
        {
           "query":"java",
           "fields":["title","skuNo"]
        }
    }
}

说明: multi_match:多字段查询,fields:设置字段的名称。

对于其他的词条查询,范围匹配、排序、模糊查询等特性就不一一举例说明了。

总结

本文知识简单介绍了Elasticsearch入门级的应用,关于Elasticsearch的原理和高级特性将在后续的文章中进行讲解。