文章目录
概念介绍
es中的search主要分为URI Search和 body Search

1. URI Search
- 操作简便,方便通过命令进行测试
- URI Search 仅包含部分查询语法

2. Body Search
- 搜索条件越来越复杂 url Search会越来越长. 这时候就该用 Body Search了,把搜索条件写在请求体中
- Body Search 支持完备的 Query DSL 查询语法

查询语法 Query DSL
es提供的一套完整的基于json格式的结构化查询语法
Search APIs
作用:搜索数据,查询语法多,功能强大
以 _search 为endpoint,主要分为字段类查询和复合查询。

字段类查询:只针对某一个字段进行查询
- 单词匹配:查询语句不做分词处理,直接去匹配字段的倒排索引,
- term 不分词
- terms

- range 用于date或number类型的字段范围查询

- 全文匹配:针对text类型的字段进行全文检索,会对查询语句先进行分词处理
- match 匹配查询,用评分机制(TF/IDF)进行打分
- match_all 查询所有
- multi_match 多字段匹配查询
- match_phrase 有顺序要求,查询指定段落
- query_string
- simple_query_string
- match 匹配查询,用评分机制(TF/IDF)进行打分
复合查询:包含一个或多个字段类查询或者复合查询语句
- bool :布尔查询由一个或多个布尔子句组成

1. must 返回的文档必须满足must子句的条件,并且参与计算分值
2. must_not 返回的文档必须不满足定义的条件
3. filter 返回的文档必须满足filter子句的条件, 不计算分值
4. should 如果没有must或者filter,有一个或者多个should子句,那么只要满足一个就可以返回
- constant_score


- dis_max
- function_score
- boosting
聚合查询
TODO
_cat API
作用:查询Elasticsearch的相关信息。包括集群中的index数量、运行状态、当前集群所在的ip,
| URI Search | 作用 |
|---|---|
| GET _cat/ | 查看cat支持的所有 endpoint 命令 ,常用: health:集群健康信息 nodes:集群节点信息(主节点+数据节点) allocation:集群分配信息(数据节点 与磁盘剩余) |
| GET _cat/【endpoint】?help | 查看该endpoint 数据列含义 |
| GET _cat/【endpoint】?v | 查看该endpoint的列名+数据 |
| GET _cat/【endpoint】?v&h=列名1,列名2… | 查看指定列 |
| GET _cat/【endpoint】?v&s=列名 | 指定列排序 |
| GET _cat/【indices】?v | 查看索引 |
count api
返回符合条件的文档数

常用query
集群
| kibana | URI Search | 作用 |
|---|---|---|
| GET / | http://IP:9200/ | 查看集群信息 |
| GET _cat/health?v | http://IP:9200/_cat/health?v | 查询集群健康信息 |
| GET _cat/nodes?v | http://IP:9200/_cat/nodes?v | 查询集群节点信息 |
| GET _cat/allocation?v | http://IP:9200/_cat/allocation?v | 查询集群数据节点信息 |
索引
| method | kibana | URI Search | 作用 |
|---|---|---|---|
| GET | GET * | http://IP:9200/_cat/indices?v | 查看所有索引列表 |
| GET | GET {index} | http://IP:9200/{索引名称} | 查看指定索引 元数据 |
文档
| method | kibana | 等同 URI Search | 作用 |
|---|---|---|---|
| GET | GET /_search | 空搜索, 搜索集群 下所有文档 | |
| GET | GET {index}/_search | http://IP:9200/{索引名称}/_search | 搜索 索引 下所有文档 |
| GET | GET {index}/{type}/_search | 搜索 索引/类型 下所有文档 | |
| GET | GET /_all/{type}/_search | 搜索 所有索引/类型 的文档 | |
| GET | GET {index}/{type}/{id} | 索引/类型/id 获取唯一文档 | |
| POST | GET {index}/_search + {json条件} | 高级搜索 |
{ QUERY_NAME: { FIELD_NAME: { ARGUMENT: VALUE, ARGUMENT: VALUE,... } } }
高级搜索
| url | 作用 |
|---|---|
| GET {index}/_search + {json条件} | 高级搜索 |
GET /索引库名/_search {
"query":{
"查询类型":{
"查询条件":"查询条件值" } } }
match_all 查询所有
GET /_search {
"query": {
"match_all": {
} } }
match 匹配查询
GET /_search {
"query": {
"match": {
"price":4000.00 } } }
multi_match 多字段匹配查询
在多个字段中查询。
GET /_search {
"query": {
"multi_match": {
"query": "zhangsan", "fields": ["name","nickname"] } } }
term 关键字精确查询
关键词匹配查询,不对查询条件进行分词
GET /_search {
"query": {
"term": {
"name": {
"value": "zhangsan" } } } }
terms 多关键字精确查询
{ "query": { "terms": { "name": ["zhangsan","lisi"] } } }
range 范围查询
2019 > timestamp > 2021
{
"query": {
"bool": {
"must": [ {
"range": {
"timestamp": {
"from": "2019-05-09T18:25:01.000+0800"}, {
"to": "2021-05-09T18:25:01.000+0800"} } } ] } } }
组合查询
must(必须 )、must_not(必须不)、should(应该)组合查询

_source 查询指定字段
{ "_source": ["name","nickname"], "query": { "terms": { "nickname": ["zhangsan"] } } }
过滤字段
- includes / excludes过滤字段
- includes:来指定想要显示的字段
- excludes:来指定不想要显示的字段
{ "_source": { "includes": ["name","nickname"] }, "query": { "terms": { "nickname": ["zhangsan"] } } }
highlight 高亮
{ "query": { "match": { "name": "zhangsan" } }, "highlight": { "pre_tags": "", "post_tags": "", "fields": { "name": {} } } }
- 排序
- 分页查询
默认返回10条,可用size指定返回条数,通过from指定位移 curl 'localhost:9200/accounts/person/_search' -d ' { "query": { "match" : { "desc" : "软件" } }, "from": 1, "size": 1 }'
java api
RestClient+SearchSourceBuilder
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207815.html原文链接:https://javaforall.net
