上一篇,我们说了如何安装 elasticsearch,本篇我们就主要介绍如何使用 elasticsearch。

索引创建

方式一:

在 Elasticsearch-head 的索引界面中新建,如下图

es-admin-cerate-index

方式二:

前言

使用工具(例如 postman)发送请求创建,不过在使用工具创建之前,我们需要了解一些基础概念

  • 索引: 索引(index)是elasticsearch的一个逻辑存储,可以理解为关系型数据库中的数据库,es可以把索引数据存放到一台服务器上,也可以sharding后存到多台服务器上,每个索引有一个或多个分片,每个分片可以有多个副本。

  • 索引类型(index_type): 在es中,一个索引对象可以存储多个不同用途的对象,通过索引类型(index_type)可以区分单个索引中的不同对象,可以理解为关系型数据库中的表。每个索引类型可以有不同的结构,但是不同的索引类型不能为相同的属性设置不同的类型。

  • 文档(document): 存储在es中的主要实体叫文档(document),可以理解为关系型数据库中表的一行记录。每个文档由多个字段构成,es是一个非结构化的数据库,每个文档可以有不同的字段,并且有一个唯一的标识符。

  • 映射(mapping): ES默认是动态创建索引和索引类型的mapping的。这就相当于无需定义Solr中的Schema,无需指定各个字段的索引规则就可以索引文件,很方便。但有时方便就代表着不灵活。比如,ES默认一个字段是要做分词的,但我们有时要搜索匹配整个字段却不行。如有统计工作要记录每个城市出现的次数。对于NAME字段,若记录“new york”文本,ES可能会把它拆分成“new”和“york”这两个词,分别计算这个两个单词的次数,而不是我们期望的“new york”。

这时,就需要我们在创建索引时定义mapping。此外,es支持多字段结构,例如:我们希望两个字段中有相同的值,一个用于搜索,一个用户排序;或者一个用于分词器分析,一个用于空白字符。例如:编写mapping文件如下:

{
    "index_type":{
      "properties":{
        "ID":{
            "type":"string",
            "index":"not_analyzed"
        },
         "NAME":{
            "type":"string",
            "fields":{
                "NAME":{
                    "type":"string"
                },
                "raw":{
                    "type":"string",
                    "index":"not_analyzed"
                }
            }            
        }
    }
}

以上文件是说我们对于index_type这个索引类型,定义了它的mapping。重点是将NAME这个字段映射为两个,一个是需要做索引分析的NAME,另一个是不分析的raw,即不会拆分new york这种词组。这样我们在做搜索的时候,就可以对NAME.raw这个字段做term aggregation,获得所有城市出现的次数了。term aggregation的REST方式的请求编写如下:

  "query": {
    "match_all": {}
  },
  "aggregations": {
    "cityAggs": {
      "terms": {
        "field": "NAME.raw"
      }
    }
  }
}

创建索引

es 提供了restful api,可以通过 put 请求,创建索引的 mapping。url中 http://es.lqiao.top 为 es 服务地址,city 是索引名称;put数据中,city_type 是索引类型名称,里面包含了两个字段 idname

注: Elasticsearch 从 5.X 就引入了 textkeyword 作为字符串类型,其中 keyword 适用于不分词字段,搜索时只能完全匹配,这时 string 类型还保留,但到了 6.X 就彻底移除 string 类型了,所以如果使用 6.X 版本,这里 type 要为 text

{
    "mappings": {
        "city_type": {
            "properties": {
                "id": {
                    "type": "integer",
                    "store": true
                },
                "name": {
                    "type": "string"
                }
            }
        }
    }
}

es-admin-create-index-for-postman

删除索引

可以通过delete请求,删除索引。如下图

es-admin-delete-index-for-postman

方式三

es 除了能够使用 HTTP 协议创建索引,也能通过提供的 Java API 方式

可以参考代码 https://gitlab.ryana.cn/ryan/elasticsearch

results matching ""

    No results matching ""