ElasticSearch

ElasticSearch,第1张

ElasticSearch ElasticSearch 一、ES介绍

ES是一款基于倒排索引的NoSQL数据库,传统数据库对于模糊查询存在性能瓶颈,而ES更擅长与大数据量的模糊查询

ES在存储数据的时候会先将数据进行分词,将分词的结果作为索引存入数据库中;当进行查询时也会将查询的参数进行分词,根据分词结果去ES中查询索引,根据索引查找到匹配的文档,从而将文档返回

二、ES请求方式 1、ES与MySQL
  • MySQL:数据存储在表中,表存储在数据库中
  • ES:document存储在Type中,type存储在index中
    • index:相当于数据库
    • type:相当于表(ES7之前可以创建多个,ES7之后只能创建一个,且默认创建,默认名为_doc)
    • docment:相当于数据库中的一条数据
2、请求方式

三、基本 *** 作

ES的 *** 作与MySQL类似,都是从数据库→数据表→数据,ES为从index→type→document

1、索引(表) 1.1创建索引
PUT index1
1.2查询索引
GET index1
GET index1/_settings
GET index1/_mapping
GET index1/_alias

查询结果为:

{
  "index1" : {
    "aliases" : { },
    "mappings" : { },
    "settings" : {
      "index" : {
        "creation_date" : "1640858096289",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "sh4a0xy9TbuJ-HkosiqIxg",
        "version" : {
          "created" : "7060299"
        },
        "provided_name" : "index1"
      }
    }
  }
}

其中,mappings为字段的映射,settings为索引的属性,aliases为索引别名
在settings中,number_of_shards字段为分片数量,number_of_replices字段为备份数量

可以在创建索引时设置索引的属性与映射

PUT index1
{
  "mappings":{
    "properties": {
      "bookId":{
        "type": "long"
      },
      "bookName":{
        "type": "text"
      },
      "bookPrice":{
        "type": "float"
      },
      "bookAuthor":{
        "type": "keyworkd"
      }
    }
  },
  "settings":{
    "number_of_shards":5,
    "number_of_replicas":2
  }
}
1.3删除索引
DELETe index1

2、document(数据)

对数据的 *** 作需要先找到Index再找到type再找到 文档编号,其中文档编号类似于MySQL中的主键

2.1添加数据
POST index1/_doc/101
{
  "bookId":1,
  "bookName":"Java",
  "bookPrice":"15.2",
  "bookAuthor":"勒布朗·詹姆斯"
}
2.2查询数据
GET index1/_doc/101
2.3修改数据

修改数据与添加数据相同,若不存在给条数据则会创建一条数据

POST index1/_doc/101
{
  "bookId":1,
  "bookName":"Java",
  "bookPrice":"1.25",
  "bookAuthor":"勒布朗·詹姆斯"
}

若不存在数据则不会进行创建

POST index1/_doc/102/_update
{
  "doc":{
    "bookId":1,
    "bookName":"Java从入门到放弃",
    "bookPrice":"1.25",
    "bookAuthor":"终南山"
  }
}
2.4删除数据
DELETE index1/_doc/101
四、复杂查询 1、精确查询 1.1 term

不会对关键字进行分词,对关键词进行全匹配

GET /index1/_search
{
  "query":{
    "term":{
      "bookId": "1"
    }
  }
}
1.2 terms

多关键词全匹配

GET /index1/_search
{
  "query":{
    "terms":{
      "bookId": ["1","2","3"]
    }
  }
}

2、模糊查询 2.1 match

对关键词进行拆词匹配

GET /index1/_search
{
  "query":{
    "match":{
      "bookName": "入门"
    }
  }
}
2.2 match_all
GET /index1/_search
{
  "query":{
    "match_all":{
    }
  }
}
2.3 multi_match

多属性匹配

GET /index1/_search
{
  "query":{
    "multi_match":{
      "query": "语言",
      "fields": ["bookName","bookAuthor"]
    }
  }
}
3、分页查询
GET /index1/_search
{
  "query":{
    "match":{
      "bookName": "入门"
    }
  },
  "from":0,
  "size":3
}
4、排序

asc升序,desc降序

GET /index1/_search
{
  "query":{
    "match":{
      "bookName": "入门"
    }
  },
  "from":0,
  "size":3,
  "sort": [
    {
      "bookId": {
        "order": "asc"
      }
    }
  ]
}
5、范围查询
GET /index1/_search
{
  "query":{
    "range": {
      "bookPrice": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}

6、模糊查询

不是分词的模糊查询,是全模糊查询,类似与MySQL中的 like

GET /index1/_search
{
  "query":{
   "fuzzy": {
     "bookName": {
       "value": "nu"
     }
   }
  }
}
四、复合查询

must → and
should → or
must_not → not

1、多条件查询
GET index1/_search
{
  "query": {
    "bool":{
      "must": [
        {
          "match": {
            "bookName": "放弃"
          }
        }
      ],
      "should": [
        {
          "match": {
            "bookAuthor": "陈奕迅"
          }
        }
      ],
      "must_not": [
        {
          "match": {
            "bookPrice": "10.39"
          }
        }
      ]
    }
  },
  "sort": [
    {
      "bookId": {
        "order": "asc"
      }
    }
  ],
  "from": 0,
  "size": 5
}
2、高亮显示

highlight字段用于高亮显示

pre_tags 为前缀
post_tags 为后缀

GET index1/_search
{
  "query": {
    "bool":{
      "must": [
        {
          "match": {
            "bookName": "放弃"
          }
        }
      ]
    }
  },
  "sort": [
    {
      "bookId": {
        "order": "asc"
      }
    }
  ],
  "from": 0,
  "size": 5,
  "highlight": {
    "fields": {
      "bookName": {}
    },
    "pre_tags": "aaaa",
    "post_tags": "ddddd"
  }
}
3、显示字段

每一个query后面都可以跟 分页查询、高亮显示、排序、显示字段

显示字段用 “_sources” 字段

GET index1/_search
{
  "query": {
    "bool":{
      "must": [
        {
          "match": {
            "bookName": "放弃"
          }
        }
      ]
    }
  },
  "sort": [
    {
      "bookId": {
        "order": "asc"
      }
    }
  ],
  "_source": ["bookId","bookName"], 
  "from": 0,
  "size": 5,
  "highlight": {
    "fields": {
      "bookName": {}
    },
    "pre_tags": "aaaa",
    "post_tags": "ddddd"
  }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5696221.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存