undefined

  1. 查看所有索引
    GET _cat/indices

查询API

语法 范围
/_search 集群上所有的索引
/jvm/_search jvm
/jvm,sql/_search jvm 和 sql
/jvm*/_search 以 jvm 开头的索引

在查询的时候需要通过 _search 来标明这个请求为搜索请求,同时可以指定 index,也可以指定多个 index,也可以使用通配符的方式对 index 进行搜索。

GET /users/_search?q=username:wupx

URI Search 使用的是 GET 方式,其中 q 指定查询语句,语法为 Query String Syntax,是 KV 键值对的形式;上面的请求表示对 username 字段进行查询,查询包含 wupx 的所有文档。

URI Search 有很多参数可以指定,除了 q 还有如下参数:
df:默认字段,不指定时会对所有字段进行查询
sort:根据字段名排序
from:返回的索引匹配结果的开始值,默认为 0
size:搜索结果返回的条数,默认为 10
timeout:超时的时间设置
fields:只返回索引中指定的列,多个列中间用逗号分开
analyzer:当分析查询字符串的时候使用的分词器
analyze_wildcard:通配符或者前缀查询是否被分析,默认为 false
explain:在每个返回结果中,将包含评分机制的解释
_source:是否包含元数据,同时支持 _source_includes 和 _source_excludes
lenient:若设置为 true,字段类型转换失败的时候将被忽略,默认为 false
default_operator:默认多个条件的关系,AND 或者 OR,默认为 OR
search_type:搜索的类型,可以为 dfs_query_then_fetch 或 query_then_fetch,默认为 query_then_fetch

指定查询和泛查询
指定字段查询:GET /movies/_search?q=2012&df=titleGET /movies/_search?q=title:2021
泛查询:GET /movies/_search?q=2021 会对所有字段进行查询

字段类查询:

  • 全文匹配:针对 text 类型的字段进行全文检索,会对查询语句先进行分词处理,如 match、match_phrase 等 query 类型
  • 单词匹配:不会对查询语句做分词处理,直接去匹配字段的倒排索引,如 term、terms、range 等 query 类型
  1. 返回所有结果

    1
    2
    3
    4
    5
    6
    POST /test/_search 
    {
    "query": {
    "match_all": {}
    }
    }
  2. 分页

    1
    2
    3
    4
    5
    6
    7
    8
    POST /test/_search
    {
    "from": 5,
    "size": 2,
    "query": {
    "match_all": {}
    }
    }

    从 from 的值开始,返回 size 个值。from 从 0 开始的饿

  3. 对搜索的结果排序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    POST /test/_search
    {
    "sort": [
    {
    "age": {
    "order": "desc"
    }
    }
    ],
    "query": {
    "match_all": {}
    }
    }

    按照 age 字段进行倒序排序

  4. 过滤

    1
    2
    3
    4
    5
    POST /test/_search
    {
    "_source": "name",
    "query": {"match_all": {}}
    }

    把需要的字段加入到 _source 中,即可只返回 _source 字段的信息
    如果 _source 中有些字段没有,则只返回匹配的文档的元数据,同时,_source 也支持使用通配符

  5. 全文匹配(会对查询语句先进行分词处理,然后进行全文检索)match

    1
    2
    3
    4
    5
    6
    7
    8
    POST /test/_search
    {
    "query": {
    "match": {
    "name": "zhangyi noahyzhang"
    }
    }
    }

    “zhangyi noahyzhang” 这个字符串会被分成 “zhangyi” 或(or) “noahyzhang” 两个字符串,是 或(or) 的关系。只要出现某个字符串就会返回这个文档

  6. 精确匹配 term
    不会对查询语句进行分词,将查询语句作为整个单词进行查询

    1
    2
    3
    4
    5
    6
    7
    8
    POST /test/_search
    {
    "query": {
    "term": {
    "name": "zhangyi"
    }
    }
    }

    terms 一次可以传入多个单词进行查询

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    POST /test/_search
    {
    "query": {
    "terms": {
    "name": [
    "zhangyi",
    "noahyzhang"
    ]
    }
    }
    }

Response

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "test",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"name" : "zhangyi",
"age" : 23,
"height" : 180
}
},
{
"_index" : "test",
"_type" : "_doc",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"name" : "noahyzhang",
"age" : 212,
"height" : 3213
}
}
]
}
}
  • took: 花费的时间
  • hits.value: 符合条件的总文档数
  • hits: 是结果集,默认是前10个文档
  • _index: 索引名
  • _id: 文档id
  • _score: 相关性评分
  • _source: 文档的原始信息