热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

map语法获取index_复习Elasticsearch的基础语法(一)

之前实践过的Elasticsearch到现在基本上的语法我都回忆不起来了,所以准备写篇文章帮助自己复习一下,没有什么技术含量的分享,但是也

之前实践过的Elasticsearch到现在基本上的语法我都回忆不起来了,所以准备写篇文章帮助自己复习一下,没有什么技术含量的分享,但是也分享给想初步了解的朋友们。

就不介绍Elasticsearch了,直接进入正文(手动分割线0.0)

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

为了模拟真实场景,建议大家在linux下安装Elasticsearch。

Kibana是一个Elasticsearch索引库数据统计工具,可以利用Elasticsearch的聚合功能,生成各种图表,而且还提供了操作Elasticsearch索引数据的控制台,并且提供了一定的API提示,非常有利于我们学习Elasticsearch的语法(划重点!!!提供API提示!),建议安装。

启动后Kibana后

选择左侧的DevTools菜单,即可进入控制台页面

98989ac90c1d3f5a1944109ac70d8dc1.png

1.基本概念

Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的。

对比关系:

索引(indices)--------------------------------Databases 数据库

类型(type)-----------------------------Table 数据表     文档(Document)----------------Row 行   字段(Field)-------------------Columns 列

2.创建索引

Elasticsearch采用Rest风格API,因此其API就是一次http请求,你可以用任何工具发起http请求

创建索引的请求格式:

  • 请求方式:PUT

  • 请求路径:/索引库名

  • 请求参数:json格式:

    {    "settings": {        "number_of_shards": 3,        "number_of_replicas": 2     }}

    • number_of_shards:分片数量

    • number_of_replicas:副本数量

    • settings:索引库的设置

查看和删除分别使用get和delete请求即可。

2.1 映射配置

通俗的讲就是mysql数据库中的建表

创建映射请求方式依然是PUT

PUT /索引库名/_mapping/类型名称{ "properties": {   "字段名": {     "type": "类型",     "index": true,     "store": true,     "analyzer": "分词器"   } }}

  • 类型名称:就是前面type的概念,类似于数据库中的不同表字段名:任意填写 ,可以指定许多属性,例如:

  • type:类型,可以是text、long、short、date、integer、object等

  • index:是否索引,默认为true

  • store:是否存储,默认为false

  • analyzer:分词器

Elasticsearch中支持的数据类型非常丰富

e72a93387ea960fe23fa5c0be5becc7a.png

他的String类型,又分两种,这个很有特色!:

    • text:可分词,不可参与聚合

    • keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合

2.1.2index

index影响字段的索引情况。

  • true:字段会被索引,则可以用来进行搜索。默认值就是true

  • false:字段不会被索引,不能用来搜索

index的默认值就是true,但是有些字段是我们不希望被索引的,比如商品的图片信息,就设置index为false。

2.1.3 store

是否将数据进行额外存储。

Elasticsearch在创建文档索引时,会将文档中的原始数据备份,保存到一个叫做_source的属性中。而且我们可以通过过滤_source来选择哪些要显示,哪些不显示。

而如果设置store为true,就会在_source以外额外存储一份数据,多余,因此一般我们都会将store设置为false。默认就为false

2.2 新增数据

通过POST请求,可以向一个已经存在的索引库中添加数据

示例:

POST /test/goods/

{

    "title":"篮球",

    "images":"123",

    "price":99

}

通过kibana查看数据:

get _search

{

    "query":{

        "match_all":{}

    }

}

-----------------------------------------------------------------------------

响应:

{

  "_index": "test",

  "_type": "goods",

  "_id": "r9c1KGMBIhaxtY5rlRKv",

  "_version": 1,

  "_score": 1,

  "_source": {

    "title": "篮球",

    "images": "123",

    "price": 99

  }

}

  • _source:源文档信息,所有的数据都在里面。

  • _id:这条文档的唯一标示,与文档自己的id字段没有关联

3. 查询

我们从4块来讲查询:

  • 基本查询

  • _source过滤

  • 结果过滤

  • 高级查询

  • 排序

3.1基本查询

基本语法

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

这里的query代表一个查询对象,里面可以有不同的查询属性

  • 查询类型:

    • 例如:match_all, match,term , range 等等

  • 查询条件:查询条件会根据类型的不同,写法也有差异

示例:

GET /test/_search

{

    "query":{

        "match_all": {}

    }

}

  • query:代表查询对象

  • match_all:代表查询所有

------------------------------------------------------------------------------

结果:

{

  "took": 2,

  "timed_out": false,

  "_shards": {

    "total": 3,

    "successful": 3,

    "skipped": 0,

    "failed": 0

  },

  "hits": {

    "total": 2,

    "max_score": 1,

    "hits": [

      {

        "_index": "jiang",

        "_type": "goods",

        "_id": "2",

        "_score": 1,

        "_source": {

          "title": "篮球",

          "images": "123",

          "price": 99

        }

      },

      {

        "_index": "jiang",

        "_type": "goods",

        "_id": "r9c1KGMBIhaxtY5rlRKv",

        "_score": 1,

        "_source": {

          "title": "足球",

          "images": "123",

          "price": 69

        }

      }

    ]

  }

}

  • took:查询花费时间,单位是毫秒

  • time_out:是否超时

  • _shards:分片信息

  • hits:搜索结果总览对象

    • _index:索引库

    • _type:文档类型

    • _id:文档id

    • _score:文档得分

    • _source:文档的源数据

    • total:搜索到的总条数

    • max_score:所有结果中文档得分的最高分

    • hits:搜索结果的文档对象数组,每个元素是一条搜索到的文档信息

3.2匹配查询

  • or关系

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

GET /test/_search

{

    "query":{

        "match":{

            "title":"小米电视"

        }

    }

}

结果不仅会查询到电视,而且与小米相关的都会查询到,多个词之间是or的关系。

-------------------------------------------------------------------------------------------------------

  • and关系

某些情况下,我们需要更精确查找,我们希望这个关系变成and,可以这样做

GET /test/_search

{

    "query":{

        "match": {

          "title": {

            "query": "小米电视",

            "operator": "and"

          }

        }

    }

}

这样,只有同时包含小米电视的词条才会被搜索到。

3.3多字段查询

multi_matchmatch类似,不同的是它可以在多个字段中查询结果我们会在title字

GET /test/_search

{

    "query":{

        "multi_match": {

            "query":    "小米",

            "fields":   [ "title", "subTitle" ]

        }

}

}

段和subtitle字段中查询小米这个词

3.4词条匹配(term)

term 查询被用于精确值 匹配,这些精确值可能是数字、时间、布尔或者那些未分词的字符串

GET /test/_search

{

    "query":{

        "term":{

            "price":2699.00

        }

    }

}

3.5结果过滤

默认情况下,elasticsearch在搜索的结果中,会把文档中保存在_source的所有字段都返回。

如果我们只想获取其中的部分字段,我们可以添加_source的过滤

GET /test/_search

{

  "_source": ["title","price"],

  "query": {

    "term": {

      "price": 2699

    }

  }

}

------------------------------------------------------------------------------------------------------------

突然发现有点晚了,还是下次再继续介绍高级查询和聚合的使用好了。。。。。。。。。。。

敬请期待~~~~~~~~~~~



推荐阅读
author-avatar
别喷我我还小_216
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有