- 查看所有索引
GET _cat/indices
查询API
语法 | 范围 |
---|---|
/_search | 集群上所有的索引 |
/jvm/_search | jvm |
/jvm,sql/_search | jvm 和 sql |
/jvm*/_search | 以 jvm 开头的索引 |
在查询的时候需要通过 _search 来标明这个请求为搜索请求,同时可以指定 index,也可以指定多个 index,也可以使用通配符的方式对 index 进行搜索。
URI Search
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=title
,GET /movies/_search?q=title:2021
泛查询:GET /movies/_search?q=2021
会对所有字段进行查询
字段类查询:
- 全文匹配:针对 text 类型的字段进行全文检索,会对查询语句先进行分词处理,如 match、match_phrase 等 query 类型
- 单词匹配:不会对查询语句做分词处理,直接去匹配字段的倒排索引,如 term、terms、range 等 query 类型
Request Body Search
返回所有结果
1
2
3
4
5
6POST /test/_search
{
"query": {
"match_all": {}
}
}分页
1
2
3
4
5
6
7
8POST /test/_search
{
"from": 5,
"size": 2,
"query": {
"match_all": {}
}
}从 from 的值开始,返回 size 个值。from 从 0 开始的饿
对搜索的结果排序
1
2
3
4
5
6
7
8
9
10
11
12
13POST /test/_search
{
"sort": [
{
"age": {
"order": "desc"
}
}
],
"query": {
"match_all": {}
}
}按照 age 字段进行倒序排序
过滤
1
2
3
4
5POST /test/_search
{
"_source": "name",
"query": {"match_all": {}}
}把需要的字段加入到 _source 中,即可只返回 _source 字段的信息
如果 _source 中有些字段没有,则只返回匹配的文档的元数据,同时,_source 也支持使用通配符全文匹配(会对查询语句先进行分词处理,然后进行全文检索)match
1
2
3
4
5
6
7
8POST /test/_search
{
"query": {
"match": {
"name": "zhangyi noahyzhang"
}
}
}“zhangyi noahyzhang” 这个字符串会被分成 “zhangyi” 或(or) “noahyzhang” 两个字符串,是 或(or) 的关系。只要出现某个字符串就会返回这个文档
精确匹配 term
不会对查询语句进行分词,将查询语句作为整个单词进行查询1
2
3
4
5
6
7
8POST /test/_search
{
"query": {
"term": {
"name": "zhangyi"
}
}
}terms 一次可以传入多个单词进行查询
1
2
3
4
5
6
7
8
9
10
11POST /test/_search
{
"query": {
"terms": {
"name": [
"zhangyi",
"noahyzhang"
]
}
}
}
Response
1 | { |
- took: 花费的时间
- hits.value: 符合条件的总文档数
- hits: 是结果集,默认是前10个文档
- _index: 索引名
- _id: 文档id
- _score: 相关性评分
- _source: 文档的原始信息