测试环境:
Win elasticsearch-5.4.1
例.在customer索引中查找包含firstname字段,且值字段值包含单词brad的文档
GET /customer/_search?q=firstname:Brad
例.在customer索引的external,sometype类型中查找包含firstname字段,且值字段值包含单词brad的文档
GET /customer/external,sometype/_search?q=firstname:Brad
例.在customer,account索引中查找包含firstname字段,且值字段值包含单词brad的文档
GET /account,customer/sometype/_search?q=firstname:Brad
GET /account,customer/_search?q=firstname:Brad
注意:索引之间只能以逗号隔开,不能有空格,比如account, customer
例.在所有索引的sometype类型中查找包含firstname字段,且值字段值包含单词brad的文档
GET /_all/sometype/_search?q=firstname:Brad
例.在所有索引中查找包含firstname字段,且值字段值包含单词brad的文档
GET /_all/_search?q=firstname:Brad
或者
GET /_search?q=firstname:Brad
参考链接:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html
常用参数说明:
q: 要查询的字段值
例. 在customer索引external类型中查找字段值为16623的文档
GET /customer/external/_search?q=16623
_source:指定文档中hits包含的字段值
例. 在customer索引external类型中查找字段值为16623的文档,仅返回firstname,lastname,balance字段
GET /customer/external/_search?q=16623&_source=firstname,lastname,balance
注意:字段值之间只能以逗号分隔,且不能包含空格,比如firstname, lastname,
sort:用于排序文档,格式fieldName,fieldName:asc或fieldName:desc
其中,asc表示按fieldName字段值升序排序,同不带fieldName,相反desc表示降序排序,可以按多个字段排序,格式形如fieldName1:asc,fieldName2:desc,的先按字段fieldName1的值升序排序,fieldName1值相同的话,再按fieldName2的值降序排序
例.查询customer索引external类型中的所有文档,按balance字段值升序排序。
GET /customer/external/_search?sort=balance:asc
例.查询customer索引external类型中的所有文档,按balance字段值升序排序,balance字段值相同则按account_number降序排序。
GET /customer/external/_search?sort=balance:asc,account_number:desc
from:指定需要返回记录的起始索引,默认为0,可以理解为mysql查询limit子句的offset
size:需要返回的记录数,默认为10
参考链接:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-uri-request.html
例. 查询/customer索引,external类型中包含firstname字段,且值为Braw的记录
POST /customer/external/_search?pretty
{
"query": {
"term": {
"firstname": "braw"
}
}
}
注意:PUT也可以替换为GET
注意:例中,如果把"firstname": "braw" 改成"firstname": "Braw",查询查不到结果,估计默认设置的情况下,先把文档字段值转小写后进行的比较
返回结果部分截图
说明:默认情况下,查询结果不区分大小,但是字段名是区分大小写的。
常见参数:参考 URI搜索
参考链接:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html
参考链接:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-query.html
例.返回查询结果中,索引大于等于1的记录,总的返回一条记录
POST customer/external/_search?pretty
{
"query": {
"term": {
"firstname": "braw"
}
},
"from": 1,
"size": 1
}
注意:from + size不能大于index.max_result_window设置的值(默认1000)
参考链接:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-from-size.html
sort 对查询结果排序
例. 对查询结果排序,按account_number降序排序,account_number相同的情况下,按balance升序排序
POST customer/external/_search?pretty
{
"query": {
"match_all": {}
},
"sort": [
{
"account_number":{ "order": "desc"},
"balance":"asc"
}
]
}
说明:
1、desc:降序,asc:升序
如上,"account_number":{ "order": "desc"},也可以简单写成"account_number":"desc",
sort mode选项
mode选项用于字段值为数组列表、多个值组成的字段排序,可选值如下:
min
选择数组中的最小值,用于字段排序
max
选择数组中的最大值,用于字段排序
sum
使用数组中所有值总和,用于字段排序,仅限于字段值由数字组成的数组
avg
使用数组中所有值的均值,用于字段排序,仅限于字段值由数字组成的数组
median
使用数组中所有值的中位数,用于字段排序,仅限于字段值由数字组成的数组
按如下方式创建一些文档记录
PUT /product/fruit/4?pretty
{
"product":"orange",
"price":[12, 17, 22]
}
例子.按price字段的数组均值降序排序查询结果
POST /product/fruit/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"price": {
"order": "desc",
"mode": "avg"
}
}
]
}
嵌套对象里的排序
嵌套对象映射
例.设置offer字段为嵌套对象(同时也会执行类型的创建操作)
PUT /product
{
"mappings": {
"myfruit": {
"properties": {
"offer": {
"type": "nested",
"properties": {
"price": {"type":"short"}
}
}
}
}
}
}
PUT /product/myfruit/1?pretty
{
"product": "orange",
"offer": [{
"price": [
12,
17,
22
]
}]
}
PUT /product/myfruit/2?pretty
{
"product": "apple",
"offer": [{
"price": [
14,
10,
9
]
}]
}
PUT /product/myfruit/3?pretty
{
"product": "apple",
"offer": [
{}
]
}
POST /product/myfruit/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"offer.price": {
"order": "asc",
"mode": "avg",
"nested_path":"offer"
}
}
]
}
说明:
nested_path:指明在哪个嵌套对象上进行排序