2.Elasticsearch入门

news2025/8/2 21:33:28

2.Elasticsearch入门

[toc]

1.Elasticsearch简介

  • Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。 能够达到实时搜索,稳定,可靠,快速,安装使用方便。

  • 客户端支持Java、.NET(C#)、PHP、Python、Ruby等多种语言。

  • 创始人:Shay Banon(谢巴农)

下载地址

  • 官网地址:https://www.elastic.co/

应用场景

  • 百度搜索

  • 商城搜索

  • 热榜搜索

2.Elasticsearch与Lucene的关系

  • Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库(框 架)

  • 但是想要使用Lucene,必须使用Java来作为开发语言并将其直接集成到你的应用 中,并且Lucene的配置及使用非常复杂,你需要深入了解检索的相关知识来理解它 是如何工作的。

Lucene缺点

  1. 只能在Java项目中使用,并且要以jar包的方式直接集成项目中.

  1. 使用非常复杂-创建索引和搜索索引代码繁杂

  1. 不支持集群环境-索引数据不同步(不支持大型项目)

  1. 索引数据如果太多就不行,索引库和应用所在同一个服务器,共同占用硬 盘.共用空间少.

3.ES和Solr比较

检索速度

  • 当单纯的对已有数据进行搜索时,Solr更快。

  • 当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的 优势。

  • 大型互联网公司,实际生产环境测试,将搜索引擎从Solr转到 Elasticsearch以后 的平均查询速度有了50倍的提升。

总结

  1. 二者安装都很简单。

  1. Solr 利用 Zookeeper 进行分布式管理,而Elasticsearch 自身带有分布式协调 管理功能。

  1. Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支持 json文件格式。

  1. Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时 效率明显低于 Elasticsearch。

  1. Solr 是传统搜索应用的有力解决方案,但 Elasticsearch更适用于新兴的实时 搜索应用。

4.ES vs 关系型数据库

关系型数据库

Database(数据库)

Table(表)

Row(行)

Column(列)

Elasticsearch

index(索引库)

type(类型)

document(文档)

field(字段)

5.Lucene全文检索框架

什么是全文检索

  • 通过一个程序扫描文本中的每一个单词,针对单词建立索引,并保存该单 词在文本中的位置、以及出现的次数

  • 用户查询时,通过之前建立好的索引来查询,将索引中单词对应的文本位 置、出现的次数返回给用户,因为有了具体文本的位置,所以就可以将具体内 容读取出来了

分词原理之倒排索引

6.Elasticsearch中的核心概念

索引 index

一个索引就是一个拥有几分相似特征的文档的集合。比如说,可以有一个客户数据 的索引,另一个产品目录的索引,还有一个订单数据的索引 一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这 个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字

映射 mapping

ElasticSearch中的映射(Mapping)用来定义一个文档
mapping是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认 值、分词器、是否被索引等等,这些都是映射里面可以设置的

字段 Field

相当于是数据表的字段|列

字段类型 Type

每一个字段都应该有一个对应的类型,例如:Text、Keyword、Byte等

文档 document

一个文档是一个可被索引的基础信息单元,类似一条记录。文档以JSON(Javascript Object Notation)格式来表示;

集群 cluster

一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提 供索引和搜索功能

节点 node

  • 一个节点是集群中的一个服务器,作为集群的一部分,它存储数据,参与集群的索 引和搜索功能

  • 一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每 个节点都会被安排加入到一个叫做“elasticsearch”的集群中

  • 这意味着,如果在网络中启动了若干个节点,并假定它们能够相互发现彼此,它们 将会自动地形成并加入到一个叫做“elasticsearch”的集群中

  • 在一个集群里,可以拥有任意多个节点。而且,如果当前网络中没有运行任何 Elasticsearch节点,这时启动一个节点,会默认创建并加入一个叫 做“elasticsearch”的集群。

分片 shard

  • 一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10 亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或 者单个节点处理搜索请求,响应太慢

  • 为了解决这个问题,Elasticsearch提供了将索引划分成多份的能力,这些 份就叫做分片

  • 当创建一个索引的时候,可以指定你想要的分片的数量

  • 每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以 被放置到集群中的任何节点上

  • 分片很重要,主要有两方面的原因,允许水平分割/扩展你的内容容量;允许在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量

  • 至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由 Elasticsearch管理的,对于作为用户来说,这些都是透明的

副本 replicas

  • 在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎 么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转 移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch允许你创建分 片的一份或多份拷贝,这些拷贝叫做副本分片,或者直接叫副本

  • 副本之所以重要,有两个主要原因

  1. 在分片/节点失败的情况下,提供了高可用性。注意到复制分片从不与原/主要(original/primary)分片置于同一节点 上是非常重要的

  1. 扩展搜索量/吞吐量,因为搜索可以在所有的副本上并行运行;每个索引可以被分成多个分片。一个索引有0个或者多个副本;

  1. 一旦设置了副本,每个索引就有了主分片和副本分片,分片和副本的数 量可以在索引 创建的时候指定

  1. 在索引创建之后,可以在任何时候动态地改变副本的数量,但是不能改变 分片的数量

7.分词器

分词器:standard

# 分词 分词器:standard
POST _analyze
{
  "analyzer": "standard",
  "text":"我爱你中国"
}

分词结果

{
  "tokens" : [
    {
      "token" : "我",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "<IDEOGRAPHIC>",
      "position" : 0
    },
    {
      "token" : "爱",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "<IDEOGRAPHIC>",
      "position" : 1
    },
    {
      "token" : "你",
      "start_offset" : 2,
      "end_offset" : 3,
      "type" : "<IDEOGRAPHIC>",
      "position" : 2
    },
    {
      "token" : "中",
      "start_offset" : 3,
      "end_offset" : 4,
      "type" : "<IDEOGRAPHIC>",
      "position" : 3
    },
    {
      "token" : "国",
      "start_offset" : 4,
      "end_offset" : 5,
      "type" : "<IDEOGRAPHIC>",
      "position" : 4
    }
  ]
}

分词器:ik_smart(会做最粗粒度的拆分)

# 分词 分词器:ik_smart,会做最粗粒度的拆分
POST _analyze
{
  "analyzer": "ik_smart",
  "text":"中华人民共和国"
}

分词结果

{
  "tokens" : [
    {
      "token" : "中华人民共和国",
      "start_offset" : 0,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 0
    }
  ]
}

分词器:ik_max_word(会将文本做最细粒度的拆分)

# 分词 分词器:ik_max_word,会将文本做最细粒度的拆分
POST _analyze
{
  "analyzer": "ik_max_word",
  "text":"中华人民共和国"
}

分词结果

{
  "tokens" : [
    {
      "token" : "中华人民共和国",
      "start_offset" : 0,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "中华人民",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "中华",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "华人",
      "start_offset" : 1,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "人民共和国",
      "start_offset" : 2,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 4
    },
    {
      "token" : "人民",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 5
    },
    {
      "token" : "共和国",
      "start_offset" : 4,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 6
    },
    {
      "token" : "共和",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 7
    },
    {
      "token" : "国",
      "start_offset" : 6,
      "end_offset" : 7,
      "type" : "CN_CHAR",
      "position" : 8
    }
  ]
}

8.指定IK分词器作为默认分词器

  • ES的默认分词设置是standard,这个在中文分词时就比较尴尬了,会单字拆分,比 如我搜索关键词“清华大学”,这时候会按“清”,“华”,“大”,“学”去分 词,然后搜出来的都是些“清清的河水”,“中华儿女”,“地大物博”,“学而 不思则罔”之类的莫名其妙的结果,这里我们就想把这个分词方式修改一下,于是 呢,就想到了ik分词器,有两种ik_smart和ik_max_word。

  • ik_smart会将“清华大学”整个分为一个词,而ik_max_word会将“清华大学”分 为“清华大学”,“清华”和“大学”,按需选其中之一就可以了。

  • 修改默认分词方法(这里修改school_index索引的默认分词为:ik_max_word):

# 修改默认分词器
PUT /school_index
{
  "settings":{
    "index":{
      "analysis.analyzer.default.type":"ik_max_word"
    }
  }
}

9.ES数据管理

ES数据管理概述

  • ES是面向文档(document oriented)的,这意味着它可以存储整个对象或文档 (document)。

  • 然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。 在ES中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。

  • ES使用JSON作为文档序列化格式。

  • JSON现在已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。

  • ES存储的一个员工文档的格式示例:

{
	"email": "584614151@qq.com",
	"name": "张三",
	"age": 30,
	"interests": [
		"篮球",
		"健身"
	]
}

10.ES基本操作

创建索引

PUT /索引名称
PUT /es_db

查询索引

GET /索引名称
GET /es_db

删除索引

DELETE /索引名称
DELETE /es_db

添加文档

PUT /索引名称/类型/id
# 创建索引
PUT /es_db

# 添加文档
PUT /es_db/_doc/1
{
	"name": "张三",
	"sex": 1,
	"age": 25,
	"address": "广州天河公园",
	"remark": "java developer"
}

# 添加文档
PUT /es_db/_doc/2
{
	"name": "李四",
	"sex": 1,
	"age": 28,
	"address": "上海金融大厦",
	"remark": "java assistant"
}

# 添加文档
PUT /es_db/_doc/3
{
	"name": "rod",
	"sex": 0,
	"age": 26,
	"address": "广州白云山公园",
	"remark": "php developer"
}

# 添加文档
PUT /es_db/_doc/4
{
	"name": "admin",
	"sex": 0,
	"age": 22,
	"address": "长沙橘子洲头",
	"remark": "python assistant"
}


# 添加文档
PUT /es_db/_doc/5
{
	"name": "小明",
	"sex": 0,
	"age": 19,
	"address": "长沙岳麓山",
	"remark": "java architect assistant"
}

修改文档

PUT /索引名称/类型/id
PUT /es_db/_doc/2
{
	"name": "李四-修改",
	"sex": 1,
	"age": 99,
	"address": "上海金融大厦-修改",
	"remark": "java assistant-修改"
}

查询文档

GET /索引名称/类型/id
GET /es_db/_doc/2

结果

{
  "_index" : "es_db",
  "_type" : "_doc",
  "_id" : "2",
  "_version" : 2,
  "_seq_no" : 5,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "李四-修改",
    "sex" : 1,
    "age" : 99,
    "address" : "上海金融大厦-修改",
    "remark" : "java assistant-修改"
  }
}

删除文档

DELETE /索引名称/类型/id
DELETE /es_db/_doc/2

结果

{
  "_index" : "es_db",
  "_type" : "_doc",
  "_id" : "2",
  "_version" : 3,
  "result" : "deleted",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 6,
  "_primary_term" : 1
}

11.Restful认识

Restful是一种面向资源的架构风格,可以简单理解为:使用URL定位资源,用HTTP 动词(GET,POST,DELETE,PUT)描述操作。 基于Restful API ES和所有客户端的交 互都是使用JSON格式的数据.

其他所有程序语言都可以使用RESTful API,通过9200端口的与ES进行通信

  • GET 查询

  • PUT 添加

  • POST 修改

  • DELE 删除

使用Restful的好处

  • 透明性,暴露资源存在。

  • 充分利用 HTTP 协议本身语义,不同请求方式进行不同的操作

12.ES中的查询操纵

查询当前类型中所有的文档

GET  /索引名称/类型/_search 

GET /es_db/_doc/_search

SQL: select * from student

结果

#! Deprecation: [types removal] Specifying types in search requests is deprecated.
{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 4,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "张三",
          "sex" : 1,
          "age" : 25,
          "address" : "广州天河公园",
          "remark" : "java developer"
        }
      },
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 1.0,
        "_source" : {
          "name" : "rod",
          "sex" : 0,
          "age" : 26,
          "address" : "广州白云山公园",
          "remark" : "php developer"
        }
      },
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 1.0,
        "_source" : {
          "name" : "admin",
          "sex" : 0,
          "age" : 22,
          "address" : "长沙橘子洲头",
          "remark" : "python assistant"
        }
      },
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : 1.0,
        "_source" : {
          "name" : "小明",
          "sex" : 0,
          "age" : 19,
          "address" : "长沙岳麓山",
          "remark" : "java architect assistant"
        }
      }
    ]
  }
}

条件查询,想要查询age等于28岁的

GET /索引名称/类型/_search?q=*:***

GET /es_db/_doc/_search?q=age:28

SQL: select * from student where age = 28

结果

#! Deprecation: [types removal] Specifying types in search requests is deprecated.
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 0,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  }
}

25岁

#! Deprecation: [types removal] Specifying types in search requests is deprecated.
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "张三",
          "sex" : 1,
          "age" : 25,
          "address" : "广州天河公园",
          "remark" : "java developer"
        }
      }
    ]
  }
}

范围查询,如果查询25 <= age <= 28,TO必须大写

GET /索引名称/类型/_search?q=***[25 TO 28]

GET /es_db/_doc/_search?q=age[25 TO 28]

SQL: select * from student where age between 25 and 26

结果

#! Deprecation: [types removal] Specifying types in search requests is deprecated.
{
  "took" : 30,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "张三",
          "sex" : 1,
          "age" : 25,
          "address" : "广州天河公园",
          "remark" : "java developer"
        }
      },
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 1.0,
        "_source" : {
          "name" : "rod",
          "sex" : 0,
          "age" : 26,
          "address" : "广州白云山公园",
          "remark" : "php developer"
        }
      }
    ]
  }
}

根据多个ID进行批量查询 _mget

GET /索引名称/类型/_mget

GET /es_db/_doc/_mget
{
	"ids":["1","2"]
}

SQL: select * from student where id in (1,2)
# 根据多个ID批量查询
GET /es_db/_doc/_mget
{
	"ids":["1","3"]
}

结果

#! Deprecation: [types removal] Specifying types in multi get requests is deprecated.
{
  "docs" : [
    {
      "_index" : "es_db",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 1,
      "_seq_no" : 0,
      "_primary_term" : 1,
      "found" : true,
      "_source" : {
        "name" : "张三",
        "sex" : 1,
        "age" : 25,
        "address" : "广州天河公园",
        "remark" : "java developer"
      }
    },
    {
      "_index" : "es_db",
      "_type" : "_doc",
      "_id" : "3",
      "_version" : 1,
      "_seq_no" : 2,
      "_primary_term" : 1,
      "found" : true,
      "_source" : {
        "name" : "rod",
        "sex" : 0,
        "age" : 26,
        "address" : "广州白云山公园",
        "remark" : "php developer"
      }
    }
  ]
}

查询年龄小于等于28岁的

GET /索引名称/类型/_search?q=age:<=**

GET /es_db/_doc/_search?q=age:<=28

SQL: select * from student where age <= 28

结果

#! Deprecation: [types removal] Specifying types in search requests is deprecated.
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 4,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "张三",
          "sex" : 1,
          "age" : 25,
          "address" : "广州天河公园",
          "remark" : "java developer"
        }
      },
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 1.0,
        "_source" : {
          "name" : "rod",
          "sex" : 0,
          "age" : 26,
          "address" : "广州白云山公园",
          "remark" : "php developer"
        }
      },
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 1.0,
        "_source" : {
          "name" : "admin",
          "sex" : 0,
          "age" : 22,
          "address" : "长沙橘子洲头",
          "remark" : "python assistant"
        }
      },
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : 1.0,
        "_source" : {
          "name" : "小明",
          "sex" : 0,
          "age" : 19,
          "address" : "长沙岳麓山",
          "remark" : "java architect assistant"
        }
      }
    ]
  }
}

查询年龄大于28岁的

GET /索引名称/类型/_search?q=age:>**

GET /es_db/_doc/_search?q=age:>28

SQL: select * from student where age > 28

结果

#! Deprecation: [types removal] Specifying types in search requests is deprecated.
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 0,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  }
}

分页查询

GET /索引名称/类型/_search?q=age[25 TO 26]&from=0&size=1

GET /es_db/_doc/_search?q=age[25 TO 26]&from=0&size=1

SQL: select * from student where age between 25 and 26 limit 0, 1

结果

#! Deprecation: [types removal] Specifying types in search requests is deprecated.
{
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "张三",
          "sex" : 1,
          "age" : 25,
          "address" : "广州天河公园",
          "remark" : "java developer"
        }
      }
    ]
  }
}

对查询结果只输出某些字段_source=字段,字段

GET /索引名称/类型/_search?_source=字段,字段

GET /es_db/_doc/_search?_source=name,age

SQL: select name,age from student

结果

#! Deprecation: [types removal] Specifying types in search requests is deprecated.
{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 4,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "张三",
          "age" : 25
        }
      },
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 1.0,
        "_source" : {
          "name" : "rod",
          "age" : 26
        }
      },
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 1.0,
        "_source" : {
          "name" : "admin",
          "age" : 22
        }
      },
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : 1.0,
        "_source" : {
          "name" : "小明",
          "age" : 19
        }
      }
    ]
  }
}

对查询结果排序 sort=字段:desc/asc

GET /索引名称/类型/_search?sort=字段 desc

GET /es_db/_doc/_search?sort=age:desc

SQL: select * from student order by age desc

结果

#! Deprecation: [types removal] Specifying types in search requests is deprecated.
{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 4,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : null,
        "_source" : {
          "name" : "rod",
          "sex" : 0,
          "age" : 26,
          "address" : "广州白云山公园",
          "remark" : "php developer"
        },
        "sort" : [
          26
        ]
      },
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : null,
        "_source" : {
          "name" : "张三",
          "sex" : 1,
          "age" : 25,
          "address" : "广州天河公园",
          "remark" : "java developer"
        },
        "sort" : [
          25
        ]
      },
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : null,
        "_source" : {
          "name" : "admin",
          "sex" : 0,
          "age" : 22,
          "address" : "长沙橘子洲头",
          "remark" : "python assistant"
        },
        "sort" : [
          22
        ]
      },
      {
        "_index" : "es_db",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : null,
        "_source" : {
          "name" : "小明",
          "sex" : 0,
          "age" : 19,
          "address" : "长沙岳麓山",
          "remark" : "java architect assistant"
        },
        "sort" : [
          19
        ]
      }
    ]
  }
}

本次用到的所有语句

GET _search
{
  "query": {
    "match_all": {}
  }
}

# 分词 分词器:standard
POST _analyze
{
  "analyzer": "standard",
  "text":"我爱你中国"
}

# 分词 分词器:ik_smart,会做最粗粒度的拆分
POST _analyze
{
  "analyzer": "ik_smart",
  "text":"中华人民共和国"
}

# 分词 分词器:ik_max_word,会将文本做最细粒度的拆分
POST _analyze
{
  "analyzer": "ik_max_word",
  "text":"中华人民共和国"
}

# 修改默认分词器
PUT /school_index
{
  "settings":{
    "index":{
      "analysis.analyzer.default.type":"ik_max_word"
    }
  }
}

# 创建索引
PUT /es_db

# 添加文档
PUT /es_db/_doc/1
{
	"name": "张三",
	"sex": 1,
	"age": 25,
	"address": "广州天河公园",
	"remark": "java developer"
}

# 添加文档
PUT /es_db/_doc/2
{
	"name": "李四",
	"sex": 1,
	"age": 28,
	"address": "上海金融大厦",
	"remark": "java assistant"
}

# 添加文档
PUT /es_db/_doc/3
{
	"name": "rod",
	"sex": 0,
	"age": 26,
	"address": "广州白云山公园",
	"remark": "php developer"
}

# 添加文档
PUT /es_db/_doc/4
{
	"name": "admin",
	"sex": 0,
	"age": 22,
	"address": "长沙橘子洲头",
	"remark": "python assistant"
}


# 添加文档
PUT /es_db/_doc/5
{
	"name": "小明",
	"sex": 0,
	"age": 19,
	"address": "长沙岳麓山",
	"remark": "java architect assistant"
}

# 查看索引
GET /es_db

# 修改文档
PUT /es_db/_doc/2
{
	"name": "李四-修改",
	"sex": 1,
	"age": 99,
	"address": "上海金融大厦-修改",
	"remark": "java assistant-修改"
}

# 查询文档
GET /es_db/_doc/2

# 删除文档
DELETE /es_db/_doc/2

# 查询所有文档
GET /es_db/_doc/_search

# 查询年龄=28岁的
GET /es_db/_doc/_search?q=age:28

GET /es_db/_doc/_search?q=age:25


# 查询年龄在25和28之间的
GET /es_db/_doc/_search?q=age[25 TO 28]

# 根据多个ID批量查询
GET /es_db/_doc/_mget
{
	"ids":["1","3"]
}

# 年龄<=28
GET /es_db/_doc/_search?q=age:<=28

# 年龄>28
GET /es_db/_doc/_search?q=age:>28

# 分页查询
GET /es_db/_doc/_search?q=age[25 TO 26]&from=0&size=1


# 只输出指定字段
GET /es_db/_doc/_search?_source=name,age


# 排序
GET /es_db/_doc/_search?sort=age:desc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/394361.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

win11下载配置CIC Flowmeter环境并提取流量特征

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、下载CIC Flowmeter二、安装java、maven、gradle和IDEA1.java 1.82.maven3.gradle4.IDEA三、CICFlowMeter-master使用四、流量特征1.含义2.获取前言 配了一整…

游戏场景编辑器和骨骼动画相关软件

游戏场景编辑器 一.Tiled(2D) Tiled 是帮助你开发游戏内容的 2D 地图编辑器。它的主要功能是可以编辑各种形式的瓦片地图&#xff0c;还支持通过用空图片这种强大的方式来标记额外信息给游戏使用。Tiled 关注的是总体灵活性&#xff0c;同时尽量保持直观性。 Tiled Map 不但…

获取Github仓库star、fork、watch数

Hi I’m Shendi https://sdpro.top/blog/html/article/1016.html 以下网址可以得到github的star&#xff0c;fork&#xff0c;watch数量图片 https://shields.io/category/social 获取仓库的 Star 则点击 Github Repo stars 填好选项后下方就会出现图标&#xff0c;点击CopyBa…

工程(十一)——NUC11+D435i+VINS-FUSION+ESDF建图(github代码)

博主的合并代码gitgithub.com:huashu996/VINS-FUSION-ESDFmap.git一、D435i深度相机配置1.1 SDKROS参考我之前的博客&#xff0c;步骤和所遇见的问题已经写的很详细了https://blog.csdn.net/HUASHUDEYANJING/article/details/129323834?spm1001.2014.3001.55011.2 相机标定参数…

解决新版QGIS找不到Georeferencer插件

目录1. 问题分析1.1 去 Raster 找&#xff0c;没找到1.2 去插件搜&#xff0c;未搜到1.3 插件库里也搜不到2. 解决办法在 QGIS 3.30中&#xff0c;按常规办法&#xff0c;找不到 Georeferencer插件&#xff0c;它并没有被安装&#xff0c;在库中也找不到它&#xff0c; 请问问题…

sheng的学习笔记Eureka Ribbon

Eureka-注册中心Eureka简介官方网址&#xff1a;https://spring.io/projects/spring-cloud-netflixEureka介绍Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper)。Zooleeper nacos.Eureka 采用了 C-S 的设计架构。Eureka Server 作为服…

【项目实战】IDEA中 90%的人都不后知后觉的小技巧汇总

一、 IDEA中如何设置左侧导航条跟代码保持同步&#xff1f; https://blog.csdn.net/Arry_Coding/article/details/102389149 二、IDEA中如何将Services调出并将启动类显示在Services中&#xff1f; https://blog.csdn.net/qq_38343402/article/details/106325154 三、IDEA中…

工业企业用电损耗和降损措施研究

来自用电设备和供配电系统的电能损耗。而供配电系统的电能损耗,包括企业变配电设备、控制设备企业在不断降低生产成本,追求经济效益的情况下,进一步降低供配电系统中的电能损耗,使电气设摘要:电网电能损耗是一个涉及面很广的综合性问题,主要包括管理损耗和技术损耗两部分…

频谱分析仪的工作原理

频谱分析仪架构犹如时域用途的示波器&#xff0c;外观如图 1.2 所示&#xff0c;面板上布建许多功能控制按键&#xff0c;作为系统功能之调整与控制&#xff0c;系统主要的功能是在频域里显示输入信号的频谱特性。频谱分析仪依信号处理方式的不同&#xff0c;一般有两种类型&am…

硬件设计 之摄像头分类(IR摄像头、mono摄像头、RGB摄像头、RGB-D摄像头、鱼眼摄像头)

总结一下在机器人上常用的几种摄像头&#xff0c;最近在组装机器人时&#xff0c;傻傻分不清摄像头的种类。由于本人知识有限&#xff0c;以下资料都是在网上搜索而来&#xff0c;按照摄像头的分类整理一下&#xff0c;供大家参考&#xff1a; 1.IR摄像头&#xff1a; IRinfr…

window.print() 前端实现网页打印详解

目录 前言 一、print()方法 二、打印样式 2.1使用打印样式表 2.2使用媒介查询 2.3内联样式使用media属性 2.4在css中使用import引入打印样式表 三、打印指定区域部分内容 3.1方法一 3.2方法二 3.3方法三 四、强制插入分页 4.1page-break-before&#xff08;指定元素前…

一条SQL查询语句是如何执行的?

平时我们使用数据库&#xff0c;看到的通常都是一个整体。比如&#xff0c;你有个最简单的表&#xff0c;表里只有一个ID字段&#xff0c;在执行下面这个查询语句时&#xff1a; mysql> select * from T where ID10&#xff1b; 我们看到的只是输入一条语句&#xff0c;返…

HTML5学习笔记(2.0)

响应式布局 优点&#xff1a;兼容不同设备分辨率&#xff0c;解决多设备显示兼容问题。 缺点&#xff1a;兼容设备工作量大&#xff0c;效率低下&#xff1b;代码冗余&#xff0c;加载时间长&#xff1b;一定程度上改变原网站的布局&#xff0c;会出现视觉混淆。 用法&#x…

JavaScript高级程序设计读书分享之10章——函数

JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 定义函数 定义函数有两种方式&#xff1a;函数声明和函数表达式大致看这两种方式没有什么区别&#xff0c;事实上&#xff0c;JavaScript 引擎在加载数据时对它们是区别对待的。JavaScript 引擎在任何代…

我的网站需要什么SSL证书?

如果您希望您的网站看起来合法可信&#xff0c;则需要SSL证书。如果您要在线销售商品或允许用户在您的公司中创建帐户&#xff0c;则特别需要此功能。SSL证书有助于保护您的信息以及客户的信息。根据Backlinko在2016年完成的研究&#xff0c;使用SSL证书甚至可以提高您的搜索引…

33 JSON操作

目录 一、介绍 二、JSON的特点 三、JSON语法 1、json中的数据类型 四、JSON文件的定义 五、读取JSON文件 1、读取json文件的两种方式 &#xff08;1&#xff09;read、write &#xff08;2&#xff09;json.load 2、使用json.load读取json文件的步骤 3、练习读取json文件 六、练…

【自然语言处理】从词袋模型到Transformer家族的变迁之路

从词袋模型到Transformer家族的变迁之路模型名称年份描述Bag of Words1954即 BOW 模型&#xff0c;计算文档中每个单词出现的次数&#xff0c;并将它们用作特征。TF-IDF1972对 BOW 进行修正&#xff0c;使得稀有词得分高&#xff0c;常见词得分低。Word2Vec2013每个词都映射到一…

qt下ffmpeg录制mp4经验分享,支持音视频(h264、h265,AAC,G711 aLaw, G711muLaw)

前言 MP4&#xff0c;是最常见的国际通用格式&#xff0c;在常见的播放软件中都可以使用和播放&#xff0c;磁盘空间占地小&#xff0c;画质一般清晰&#xff0c;它本身是支持h264、AAC的编码格式&#xff0c;对于其他编码的话&#xff0c;需要进行额外处理。本文提供了ffmpeg录…

2023最全电商API接口 高并发请求 实时数据 支持定制 电商数据 买家卖家数据

电商日常运营很容易理解&#xff0c;就是店铺商品维护&#xff0c;上下架&#xff0c;评价维护&#xff0c;库存数量&#xff0c;协助美工完成制作详情页。店铺DSR&#xff0c;好评率&#xff0c;提升客服服务等等&#xff0c;这些基础而且每天都必须做循环做的工作。借助电商A…

Webpack前端资源加载/打包工具

文章目录一、Webpack1、什么是Webpack2、Webpack安装2.1全局安装2.2安装后查看版本号3、创建项目3.1初始化项目3.2创建src文件夹3.3 src下创建common.js3.4 src下创建utils.js3.5 src下创建main.js4、JS打包4.1创建配置文件4.2执行编译命令4.3创建入口页面4.4测试5、CSS打包5.1…