ES支持两种基本方式检索:
一个是通过使用 REST request URI来发送搜索参数(uri + 检索参数)
GET bank/_search?q=*&sort=account_number:asc
另一个是通过 REST request body 来发送他们 (uri + 请求体)
GET bank/_search { "query":{ "match_all":{} }, "sort":[ { "balance":{ "order":"desc" } } ], "from":0, "size":5, "_source":["balance","firstname"] }
1、match_all :查询所有
GET bank/_search
{
"query":{
"match_all":{}
},
"sort":[
{
"balance":"asc"
}
]
}
2、match查询
全文检索会按照评分进行排序,
首选需要对要查询的字符串进行分词,然后根据分词的结果进行匹配
最后根据得分进行排序
GET bank/_search
{
"query": {
"match": {
"address": "kings"
}
}
}
3、match_phrase 【短语匹配】
将需要匹配的值,当成一个整体单词(不分词)进行检索
GET bank/_search
{
"query": {
"match_phrase": {
"address": "mill lane"
}
}
}
4、multi_match 【多字段匹配】
也是分词查询
// 查询 adress或者city中包含 mill的数据
GET bank/_search
{
"query": {
"multi_match": {
"query": "mill",
"fields": ["address","city"]
}
}
}
5 bool查询
GET bank/_search
{
"query": {
"bool": {
"must":[
{
"match": {
"gender": "F"
}
},
{
"match": {
"address": "Mill"
}
}
]
}
}
}
GET /bank/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"address": "Fillmore"
}
},
{
"match": {
"age": "36"
}
}
],
"must_not": [
{
"multi_match": {
"query": "Fillmore",
"fields": ["city"]
}
}
]
}
}
}
6、filter 结果过滤
只用于对数据进行过滤,不会计算相关性得分
GET bank/_search
{
"query": {
"bool": {
"filter": {
"range": {
"age": {
"gte": 10,
"lte": 20
}
}
}
}
}
}
7、term 查询
和match一样。匹配某个属性的值。全文检索用match,其他非text字段匹配用term
GET /bank/_search
{
"query": {
"term": {
"balance": {
"value": "32838"
}
}
}
}
精确匹配:查询address等于132 Gunnison的文档
GET bank/_search
{
"query": {
"match": {
"address.keyword": "132 Gunnison"
}
}
}