ES简介
Elasticsearch:全文检索引擎,快速存储,检索、和分析海量数据
底层是由Lucene支持
Lucene
开放的源代码的全文检索引擎工具包,不是完整的全文检索引擎,而是一个全文检索的引擎架构,
特点:
- 完整的查询
- 完整的索引
- 部分具有文本分析
Lucene提供了一个简单缺强大的应用程序接口
ES基本概念
P:Primary shard 主分片
R:Reaplication shard 备用分片
- 一个cluster存在一或者多个node组成,每个集群都有一个cluster.name最为唯一标识符
- 一个ES实例就是一个node节点,一个机器可以有多个实例,大多数情况中,每个node运行在独立的VM中,
cluster:集群
node:节点
index:索引
document:文档
索引既是一系列的documents的集合,index的单条记录称为document,其中document为json格式
同一个index里面的documents不要求有相同的结构,但是最好保持相同,这样有利于提高搜索效率
-
分片shard
- ES是分布式搜索引擎,一个索引有多个分片(索引的数据被分配到各个分片上)
- 分片会横向扩展,N个分片会随着节点的增加平均分配到每个节点中,(这个过程称为Relocation扩展)
- 分片是独立的,对于一个search Request的行为,每个分片都会执行这个Request(并发查询)
分片的作用:
- 支持横向扩展,当数据无限的增加的情况下,可以把分片直接转移到另外一台物理机上,而不是增加单一的机器配置
- 支持并发查询,可以实现多台物理机协同处理联合查询增加吞吐量
-
Replica复制
- 复制,可以理解为备份分片
- 主分片和备份分片不会出现在同一个节点上
- 如果只有一个node节点,此时集群status会变为yellow
副本的作用:
- 实现高可用,在主分片存在问题时,备份分片会提供准确且完整的分片数据
- 提高搜索吞吐量,副本只是具备用户只读属性,用户可以在主分片和副本之间查询数据信息
主从之间的数据同步
- 主分片数据发生变化,通知相应的副本分片
- 副本分片开始对主分片内容进行复制
- 副本分片复制成功后,返回确认消息给主分片
- 主分片再次确认后进行发布,数据同步成功
-
Mapping映射
映射是定义一个文档以及其所包含的字段如何被存储和索引的方法
例如,用映射来定义以下内容:
- 哪些 string 类型的 field 应当被当成当成 full-text 字段
- 哪些字段应该是数值类型、日期类型或者是地理位置信息
- 日期类型字段的格式是怎么样的
- 是否文档的所有字段都需要被索引到 _all 字段
动态增加的 field 可以由用户自定义的模板来控制其行为
ES安装部署
前提准备
- jdk 1.8
- es的启动不能使用root用户,需要创建相应的用户和所属组,并使用该用户进行启动操作
下载安装包,并解压
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.zip
$ unzip elasticsearch-5.5.1.zip
$ cd elasticsearch-5.5.1/
启动ES
- 前台启动ES
$ ./bin/elasticsearch
访问ES的基本信息
$ curl localhost:9200
输出:
{
"name" : "atntrTf",//节点名
"cluster_name" : "elasticsearch",//所属集群名
"cluster_uuid" : "tf9250XhQ6ee4h7YI11anA",
"version" : {
"number" : "5.5.1",
"build_hash" : "19c13d0",
"build_date" : "2017-07-18T20:44:24.823Z",
"build_snapshot" : false,
"lucene_version" : "6.6.0"
},
"tagline" : "You Know, for Search"
}
默认情况下,Elastic 只允许本机访问,如果需要远程访问,可以sudo vim (Elastic 安装目录的)config/elasticsearch.yml文件,去掉network.host的注释,将它的值改成0.0.0.0,然后重新启动 Elastic。
- 后台启动ES
./bin/elasticsearch -d -p pid
参数说明
-d
后台启动
-p
将后台几启动的ES进程的pid保存到当前目录下的pid文件中
如果我们需要关闭ES服务,则需要通过查看ES进程的pid进行kill掉
# 查看ES的进程的pid
# 发第一种
cat pid # 在启动的时候,指定-p参数,将进程pid写入到当前路径下的pid文件具体的文件路径信息,还是要以-p指定的路径为主
# 第二种
jps # 通过jps直接可以查看到ES进程的pid
# 关闭ES相关服务进程
kill <-9> <ES pid>
- 启动ES的时候,指定集群名称与node节点名称
./bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_1
ES的实际操作
查看当前所有的index
$ curl -X GET 'http://localhost:9200/_cat/indices?v'
查看集群的健康值
$ curl -X GET "localhost:9200/_cat/health?v"
输出:
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1475247709 17:01:49 elasticsearch green 1 1 0 0 0 0 0 0 - 100.0%
集群的健康状态分为以下三部分:
-
green:代表集群状态良好,所有节点的数据均可用,可以创建一个或者多个副本
-
yellow:代表集群node节点有且仅有一个,无法创建副本,但是该node节点中的数据是可用的
-
red:代表集群异常,部分功能可以用
获得集群列表
curl -X GET "localhost:9200/_cat/nodes?v"
输出:
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1 10 5 5 4.46 mdi * PB2SGZY
创建一个索引
curl -X PUT "localhost:9200/customer?pretty"
# pretty 代表的是使用清晰格式
查看分片状态
curl -X GET "localhost:9200/_cat/indices?v"
输出:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open customer 95SQ4TSUT7mWBT7VNHH67A 5 1 0 0 260b 260b
索引和查询文档
curl -X PUT "localhost:9200/customer/_doc/1?pretty" -H 'Content-Type: application/json' -d'
{
"name": "John Doe"
}
删除索引
DELETE /customer?pretty
ES的基本设置信息
ES的需要修改的三个配置文件
elasticsearch.yml
用于配置 Elasticsearchjvm.options
用于配置 Elasticsearch JVM 设置log4j2.properties
用于配置 Elasticsearch日志记录
ES配置
参数 | 说明 | 备注 |
---|---|---|
Path setting | 路径设置 | 将数据和日志保存在服务器其他位置,这样即使在升级ES版本的情况下也能保持数据和日志不被更改(path.data、path.logs) |
Cluster name | 集群名称 | 如果不设置,默认值为elasticsearch,只有cluster.name相同的节点才会被聚合为一个集群 |
Node name | 节点名称 | 默认使用随机生成的uuid前七个字符,重启ES不会更改 |
Network host | 网络主机 | 对外提供服务的IP地址,默认为localhost,一旦配置即认为进入生产环境 |
Discovery setting | 集群节点发现机制的设置 | 发现部署在其他服务器上的集群节点discovery.zen.ping.unicast.hosts为避免分裂大脑,应将此设置设置为符合条件的主节点的法定数量:(master_eligible_nodes / 2)+ |
Heap size | JVM堆内存的配置 | ES要求堆内存最小和最大空间设置要相等 |
Heap dump path | 堆转储路径 | 默认/var/lib/elasticsearch |
GC logging | 垃圾回收日志 | 默认启用 |
Temp directory | 临时目录 | 某些Linux下会自动定时清理/tmp,所以尽量为ES设置单独的临时目录 |
系统配置
参数 | 说明 | 备注 |
---|---|---|
Disable swapping | 禁用交换分区 | swap影响性能、节点稳定性 |
Increase file descriptor | 增加文件描述符 | 用尽文件描述符有可能导致数据丢失 |
Ensure sufficient threads | 确保足够的线程数 | 至少为4096 |
JVM DNS cache setting | JVM DNS 缓存设置 | |
Temporary directory not mounted with noexec | 临时目录未挂载noexec |
Bootstrap 检查
在启动ES的时候,会进行Bootstrap检查,如果我们在elasticsearch.yml文件中,配置了network.host这个配置项,ES会默认进入生产模式,并将警告升级到异常,ES不会启动,在开发者模式中如果未配置将警告写入到日志信息文件,但是ES仍然会运行。
包括:
参数 | 说明 | 备注 |
---|---|---|
Heap size check | 堆大小检查 | 如果以不等的初始和最大堆大小启动JVM,则在系统使用期间调整JVM堆的大小时,它可能会暂停。要避免这些调整大小暂停,最好以初始堆大小等于最大堆大小来启动JVM |
File descriptor check | 文件描述符检查 | |
Memory lock check | 内存锁检查 | 请求JVM通过mlockall将堆锁定在内存中 |
Maximum number of threads check | 最大线程数检查 | 检查的最大线程数确保Elasticsearch进程有权在正常使用下创建足够的线程 |
Maximum file size check | 最大文件大小检查 | Elasticsearch应具有无限的地址空间 |
Maximum number of threads check | 最大内存映射数检查 | 为了mmap有效使用,Elasticsearch还需要能够创建许多内存映射区域,检查内核是否允许进程至少具有262,144个内存映射区域 |
Client JVM check | JVM客户端检查 | |
Use serial collector check | 使用串行收集器检查 | 串行收集器检查可确保Elasticsearch未配置为与串行收集器一起运行 |
OnError and OnOutOfMemoryError checks | 致命错误检查 | |
Early-access check | 早期版本检查 | 类似内侧(Beta) |
G1GC check | 早期版本JDK中组件可能导致索引损坏 | |
All permission check | 所有权限检查 | 相当于禁用安全管理 |
集群配置信息
两个配置文件
-
elasticsearch.yml:全局配置文件,用于服务器级别对ES进行配置
-
静态配置
-
节点级别上进行设置
-
配置在elasticsearch.yml文件中进行设置
-
配置在环境变量中
-
配置在命令行中
注意:静态配置中,节点一旦启动,静态设置不能修改,集群名称和集群节点名称(cluster.name 和 node.name),属于静态配置项,不能在集群运行时进行修改。
-
-
动态配置
- 可以在集群运行的时候,通过RESTful API进行修改
注意:
- 静态可以理解为修改在硬盘上存的持久化文件,运行ES的时候载入内存
- 动态理解为修改在内容中的数据,重启服务后不会进行保存
-
-
logging.yml
集群唯一标识符cluster.name
在ES集群中,通过配置集群的名称(cluster.name),用于标识一个集群,不同的集群,cluster.name是不同的,集群名称相同的节点,自动组成一个集群。默认为elasticsearch
当启动一个节点的时候,该节点会自动去寻找相同集群名称的主节点,如果找到主节点,则该节点自动加入该集群;如果该节点不能寻找到主节点,那么该节点就成为该集群的主节点。
节点配置
ES节点类型
-
主节点
- 有且仅有一个,负责管理集群
- 执行集群级别的操作,例如:创建索引、删除索引等
- 跟踪集群中所有节点的状态信息,并决定那些分片分配给相关节点,保证了集群的稳定性
-
候选主节点(Master-eligible)
- 有资格被选为主节点,控制整个集群
- 主节点出现故障的时候,集群会对候选节点进行选举,当一个候选节点成为新主节点的时候,这个过程体现了集群故障的自动转移,保证了集群得稳定性。
- 候选节点具有投票权,其他节点没有投票权
-
数据节点(Data)
- 该节点保存数据和执行数据相关的操作,如增删改查,搜索,和聚合
-
预处理节点
- 可以执行一个或者多个预处理器组成的预处理流水线
- 根据预处理器执行的操作类型和所需资源,具有专用预处理节点可能是有意义的,这些节点仅执行此特定任务
-
客户端节点
- 当一个节点的node.master和node.data都设置为false的时候,它既不能保持数据也不能成为主节点,该节点可以作为客户端节点,可以响应用户的情况,把相关操作发送到其他节点
-
部落节点(tribe)
- 当一个节点配置tribe.*的时候,它是一个特殊的客户端,它可以连接多个集群,在所有连接的集群上执行搜索和其他操作
在单节点状态下,ES一般都是将主节点和数据节点设置在同一台服务器中,这对小型服务器来讲非常方便,但是随着集群的增加,数据节点的索引数据,搜索查询等操作会占用大量的CPU、内存、IO资源的情况,为了确保集群的稳定性,分离主节点和数据节点是一个比较好的选择。
- node.data: true
- 配置该节点的是数据节点,用与保存数据,执行数据相关操作
- node.master: true
- 配置该节点的是候选主节点,用于请求和管理集群,如果节点没有资格成为主节点,那么该节点永远不可能变为主节点;如果该节点有资格成为主节点,只有在被其他的候选节点认可和被选举为主节点之后,才能成为主节点。
配置当前节点只保存数据
node.master: false
node.data: true
配置当前节点为候选节点
node.master: true
node.data: false
水平扩容
水平扩容指的是通过增加服务器的方式,提供集群的存储能力。
默认的配置是把索引分成5个分片,每个分片1个副本,一共10个节点
index.number_of_shards: 5
index.number_of_replicas: 1
集群网络配置
节点IP配置
配置当前的节点绑定IP地址,默认为0.0.0.0
network.bind_host: 192.168.0.1 #此处一定要慎重
设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址
network.publish_host: 192.168.0.1
同时设置bind_host和publish_host两个参数
network.host: 192.168.0.1
设置节点之间交互TCP端口,默认为9300
transport.tcp.port: 9300
设置对外服务的HTTP端口,默认为9200
http.port: 9200
设置是否压缩TCP传输时的数据,默认为flase,不压缩
transport.tcp.compress: true
设置HTTP包内容的最大容量,默认100mb
http.max_content_length: 100mb
是否启用HTTP协议对外提供服务,默认为true,开启
http.enabled: true
集群的发现机制
ES是采用的Zen来进行的寻找节点和选举主节点来组建集群的。
Zen发现默认使用多播,但是单播发现比较安全,推荐使用单播
- 单播:指将消息一对一都发送给网络中所有可能的主机。(单播代替多播:防止计划外的节点意外加入集群)
- 多播:指的是在一次传输中将消息发送给一组计算机。
主节点选取配置
discovery.zen.minimum_master_nodes 属性:默认值是1,该属性定义的是为了组成一个集群,相互连接的候选主节点的最小数目,强烈推荐该属性的设置使用多数原则:(master_eligible_nodes / 2) + 1,既能避免出现脑裂(split-brain),又能在故障发生后,快速选举出新的主节点,例如,有5个候选主节点,推荐把该属性设置为3
多播配置(multicast)
多播是Zen默认的方法
discovery.zen.ping.multicast.group: #用于多播请求的群组地址,默认值是224.2.2.4
discovery.zen.ping.multicast.port: #设置多播通信的端口,默认值是54328
discovery.zen.ping.multicast.ttl: #设置多播请求被认为有效的时间,默认值是3s
discovery.zen.ping.multicast.address: #设置ElasticSearch绑定的网络接口,默认为null,意味着ElasticSearch尝试绑定所有网络接口
discovery.zen.ping.multicast.enable: #启用或禁用多播
单播配置(unicast)
使用单播的时候,一定要禁用多播。
discovery.zen.ping.unicast. hosts: #指定接收单播请求的主机IP地址,推荐包含组成集群的所有主机,主机之间用逗号隔开;
discovery.zen.ping.multicast.enabled: false # 禁用多播
discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]
集群节点之间状态检测
ping是节点之间发送的心跳信号,用于检测其他节点是否健康运行,如果其他节点无法响应该信号,那么集群认为该节点发生故障,配置ping信号的属性
discovery.zen.fd.ping_interval: #默认为1s,设置节点之间互相ping信号的时间间隔;
discovery.zen.fd.ping_timeout: #默认为30s,设置当前节点发送ping信号后等待目标节点响应的时间,超过该时间,当前节点认为目标节点无法响应;
discovery.zen.fd.ping_retries: #默认为3次,设置重试次数,超过此次数之后,判定目标节点出现故障,停止工作;
discovery.zen.ping.timeout: #默认值是3s,设置当前节点等待其他节点的ping信号的超时时间;
本地网关和还原
网关:用于持久化存储集群数据信息,包括集群状态、索引和索引数据,索引里面的映射和索引级别的配置信息等源数据,网关相当于关系型数据库DB的事务日志,每一次集群的数据改变,ES都会将集群的数据存储到网关中。
网关类型
目前只支持local本地网关类型,在本地文件系统中存储索引及其元数据
gateway.type: local
还原控制
gateway.recover_after_nodes:3 #表示当集群中有3个节点之后,允许执行还原进程;
gateway.recover_after_time:10m #表示当集群满足gateway.recover_after_nodes属性(集群中至少有3个节点)之后,ElasticSearch在10分钟之后开始执行还原进程;
gateway.expected_nodes:5 #设置集群期望的节点数量,当集群中节点的数目等于5,并且满足gateway.recover_after_nodes #集群中至少有3个节点时,ElasticSearch将立即执行还原进程;
#网关对数据节点和主节点的还原控制:
gateway.recover_after_master_nodes /*和*/ gateway.expected_master_nodes
gateway.recover_after_data_nodes /*和*/ gateway.expected_data_nodes
保护动作
默认情况下,ES自动创建索引,推荐关闭该选项。
action.disable_close_all_indices: true
action.disable_delete_all_indices: true
action.disable_shutdown: true
action.auto_create_index: false
还原限制
cluster.routing.allocation.node_initial_primaries_recoveries: 4 #在初始化还原期间,控制单个节点中执行并行还原进程的数量;
cluster.routing.allocation.node_concurrent_recoveries: 2 #在增加/移除节点,重平衡期间,控制单个节点中执行并行还原进程的数量;
indices.recovery.max_bytes_per_sec: 100mb #在还原时,吞吐量的上限,默认值是20MB;
indices.recovery.concurrent_streams: 5 #在还原分片时,设置开启的并发流的上限;
线程池的配置
ES所支持的线程池如下:
- cache:无限线程池,为每一个请求创建一个线程
- fixed:固定大小线程池,大小由size属性指定
对于固定大小的线程池类型,必须为ElasticSearch指定一个请求队列(queue)用来保存请求,请求被存储到队列中,直到有一个空闲的线程来执行请求;如果队列满了,ElasticSearch无法把请求存放到队列中,该请求将被拒绝
threadpool.index.type: fixed
threadpool.index.size: 100
threadpool.index.queue_size: 500
全文索引
全文检索主要是针对非结构化数据,主要有两种方法
-
顺序扫描法
逐步扫描每一个文档,并且每个文件都要从头查询到尾,如果找到了,就继续找下一个,直到遍历所有文档,这种方法一般用于数据量较小的场景
-
全文检索
在非结构化的数据中,通过将一部分结构化数据进行提取,重新组织,然后针对这部分有结构化的数据进行索引建立,从而达到快速查询数据的目的。
全文检索分为两个步骤:
- 创建索引
- 搜索索引
索引分类
-
正向索引
从文档中查找字符串,关系型数据库使用的是正向索引
-
反向索引
从字符串查找文档,搜索引擎lucene使用的是反向索引
如上图所示,假如我有100个文档,对他们从1-100进行编号;
左边保存的是一系列的字符串,也可以理解为词,我们称这些字符串集合为词典;
右边保存的是包含左边字符串的文档链表,此文档链表成为倒排表(从小到大依次排列)
在上面中,我们对词典中包含的字符串创建索引,而这些字符串也正是我们搜索的信息,因此可以大大加快查询速度
比如说我们要查找同时包含"lucene"和"hadoop"的文档,我们只需以下几步:
第一步:取出包含 lucene 的文档链表
第二步:取出包含 hadoop 的文档链表
第三步:合并链表,取出交集
全文检索与顺序检索的区别在于:顺序扫描每次都必须从头到尾扫描全部数据,但是全文检索的索引创建过程只需要一次,以后查询无需再次创建,缺可以一直被检索所用。
全文检索相对顺序扫描的优势在于一次索引创建,多次使用
正排索引
正排索引也称为“前向索引”,它是创建倒排索引的基础具有以下字段:
-
LocalId字段(表中简称"Lid"):表示一个文档的局部编号。
-
WordId字段:表示文档分词后的编号,也可称为"索引词编号"。
-
NHits字段:表示某个索引词在文档中出现的次数。
-
HitList变长字段:表示某个索引词在文档中出现的位置,即相对于正文的偏移量。
倒排索引
如何创建索引
- 将文档交给切词组件进行切词处理
- 将文档中的词进行切分,产生词元,并且消除一些无意义的词,减少索引大小
- 将得到的词元交给语言处理组件
- 将切分后产生的词元进行同化处理,也就是意味着同化出与词元相近的词元(大小写、相近词等)
- 将得到的词交给索引组件
- 利用得到的词得到一个词典
- 将词典按字母进行排序
- 合并相同的词并创建立倒排链表
- 由索引组件针对词建立索引
- 建立索引
如何对索引进行搜索
- 用户输入查询语句
- 输入:lucene AND learned NOT hadoop 表示:
- 对查询语句进行词法分析、语法分析、语言处理
- 词法分析主要用来识别单词和关键词,例如得到的识别单词是lucene learned hadoop,关键词是:AND NOT
- 语言分析主要是根据查询语句来生成一棵语法树
- not
- and
- lucene
- learned
- hadoop
- and
- not
- 语言处理与语言分析一样,只不过是将识别单词替换为与识别单词相似的单词信息,最后也是成一棵语法树
- 搜索索引,得到符合语法树的文档
- 在反向索引中,找到包含识别单词的文档
- 将lucene和learned得文档的交集,得到包含二者的文档链条
- 将交集后的链表与hadoop的文档链表进行差集操作,去除包含hadoop的链表操作,得到最后的文档链表
- 根据得到的文档相关性和查询语句的相关性,对查询结果进行排序。
- 根据得到的文档和查询语句相关性,对结果进行排序予以展示
Lucene是一个开源的分布式搜索引擎的实现,Elasticsearch底层就是基于Lucene实现的,只所以能够实现分布式查询,原因就在于每一个文档在出库入库之前,就已经进行切词处理,针对每个词建立索引,是一种空间换时间的说法
读写Document
Elasticsearch中每个索引都被划分成分片,每个分片可以有多个副本,这些副本称为复制组,在添加或者删除文档时必须保存同步,如果做不到这一点,从一份拷贝中读取与另一分拷贝中读取将导致非常不同的结果,保持分片副本同步并从中读取服务的过程称为数据复制模型。
Elasticsearch的数据复制模型是基于主备份模型的,该模型是基于从充当主分片的复制组中获得一个副本。其他副本称为复制分片。
基本写模型
Elasticsearch中的每个索引操首先使用路由解析到一个复制组,通常基于文档ID,一旦确定了复制组,该操作,将在内部转发到该组的当前朱分片。主分片负责验收操作并将其转发到其他副本中。
基本流程如下:
- 验证传入的操作并在结构上无效时拒绝他们
- 在本地执行操作的时候,即索引或者删除相关文档。这也验证了字段中的内容并在需要的时候拒绝。
- 将操作转发到当前副本集中的每个副本中,如果存在多个副本,则并行执行
- 一旦所有的副本成功执行操作并对主副本做出相应,主副本就会向客户机确认请求已成功完成
基本读操作
当节点接收到读请求时,该节点负责将其转发到持有相关分片的节点、整理响应并响应客户机。我们将该节点称为该请求的协调节点。
基本流程如下:
- 常需要从多个分片读取,每个分片表示数据的不同子集。
- 从分片复制组中选择每个相关分片的活动副本。它可以是主节点,也可以是副本。默认情况下,Elasticsearch 只是在分片副本之间进行轮询。
- 将分片级读取请求发送到所选副本。
- 结合结果并做出响应。
ES各个概念的含义
- PUT
- 插入数据/创建一个数据
- GET
- 得到数据
- POST
- 更新数据
- DELETE
- 删除数据
Mysql | Elasticsearch |
---|---|
Database | index |
Table | Type |
Row | Document |
cloumn | Field |
Schema | Mapping |
Index | Everything is indexed |
Sql | Query DSL |
Select * from table … | GET http:// |
Update table set … | PUT http:// |
Elasticsearch检索类型
在ES存储数据后,我们可以通过以下方法对数据进行检索
- 精确查询,类似于Sql中的“=”操作
- 模式匹配,类似于Sql中的“like %关键词%”查询操作
- 前缀匹配
- 通配符匹配
- 正则表达式匹配
- 跨索引匹配
- 提升精读匹配
ES中的检索类型
结构化检索
针对的字段类型:日期、时间、数字类型、以及精确的文本匹配
结构化检索的特点:
- 结构化查询,得到的结果一般只有两个结果,结果要么在集合之中,要么在集合之外
- 结构化查询不关系文件的相关读或者评分,它简单的对文档包括或排除处理
精确值检索
一般使用term来查询出我们想要查询的单词信息,term 查询是简单的,它接受一个字段名以及我们希望查找的数值
-
单个精确值检索
类似于Mysql一样,通过指定一个参数,查询出所有包含该参数的所有值。一般与filter过滤器一起使用。
-
多个精确值检索
范围检索
range查询可同时提供包含和不包含这两种范围表达式,可提供组合的选项如下:
gt: > 大于(greater than)
lt: < 小于(less than)
gte: >= 大于或等于(greater than or equal to)
lte: <= 小于或等于(less than or equal to)
(类似MySql中where value between and)
存在状态检索
GET /bank/_search
{
"query" : {
"constant_score" : {
"filter" : {
"exists" : { "address" : "LA" }
}
}
}
}
前缀检索
GET /_search
{ "query": {
"prefix" : { "lastname" : "H" }
}
}
通配符检索
?:代表的单个字符
* :代表0到多个字符
GET /bank/_search
{
"query": {
"wildcard" : { "lastname" : "ki*y" }
}
}
正则表达式检索
GET /bank/_search
{
"query": {
"regexp":{
"firstname": "s.*y"
}
}
}
模糊检索
模糊查询查找在模糊度中指定的最大编辑距离内的所有可能的匹配项,然后检查术语字典,以找出在索引中实际存在待检索的关键词。
GET /bank/_search
{
"query": {
"fuzzy" : { "first" : "ki" }
}
}
IDS检索
检索指定的ID的信息