1.SearchAPI
ES支持两种基本方式检索
- 一个是通过使用 REST request URI 发送搜索参数(uir+检索参数)
- 另一个是通过使用 REST request body 来发送它们(uri+请求体)
第一种: GET bank/_search?q=*&sort=account_number:asc
第二种:
GET bank/_search
{
"query":{
"match_all":{}
},
"sort":[
{
"account_number":"asc"
},
{
"balacne":"desc"
}
]
}
2.Query DSL
1.基础语法格式
Elasticsearch 提供了一个可以执行查询的Json风格的DSL(domain-specific 领域特定语言)。这个被称为Query DSL。该查询语言非常全面,并且刚开始的时候感觉有点复杂,真正学号它的方法是从一些基础的示例开始的。
一个查询语句的典型结构:
{
QUERY_NAME:{
ARGUMENT:VALUE,
ARGUMENT:VALUE,
.....
}
}
如果是针对某个字段,那么结构如下:
{
QUERY_NAME:{
FIELD_NAME:{
ARGUMENT:VALUE,
ARGUMENT:VALUE,
.....
}
}
}
match_all
GET bank/_search
{
"query":{
"match_all":{}
},
"sort":[
{
"balance":{
"order":"desc"
}
}
]
}
搜索全部并且按照金额 降序排列
GET bank/_search
{
"query":{
"match_all":{}
},
"sort":[
{
"balance":{
"order":"desc"
}
}
],
"from":0, //从第0条开始
"size":5
}
从第1页拿五条数据 类似分页
GET bank/_search
{
"query":{
"match_all":{}
},
"sort":[
{
"balance":{
"order":"desc"
}
}
],
"from":0, //从第0条开始
"size":5,
"_source":["balance","firstname"] // 选择要返回的字段
}
match
如果是数字 可以精确查询
{
"query":{
"match":{
"account_number":20
}
}
}
如果是字符的话可以模糊查询
{
"query":{
"match":{
"address":"Kings" //全文检索 模糊查询
}
}
}
全文检索,会按照评分进行排序 ,会对检索条件进行分词匹配
match_phrase 【短语匹配】
将需要匹配的值当成一个整体单词(不分词)进行检索
GET bank/_search
{
"query":{
"match_phrase":{
"address":"mill road"
}
}
}
multi_match 【多字段匹配】
GET bank/_search
{
"query":{
"multi_match":{
"query":"mill movico",
"fields":["state","address"]
}
}
}
bool【复合查询】
bool用来做复合查询:
复合语句可以合并 任何 其他查询语句,包括复合语句,了解这一点很重要,这就意味着,复合语句之间可以相互嵌套,可以表达非常复杂的逻辑
GET bank/_search
{
"query":{
"bool":{
"must":[
{
"match":{
"gender":"M"
}
},
{
"match":{
"address":"mill"
}
}
],
"must_not":[
{
"match":{
"age":"28"
}
}
],
"should":[
{"match":{
"lastname":"wallace"
}
}
]
}
}
}
filter结果过滤
term
和match一样,匹配某个属性的值。全文检索字段用match,其他非text字段匹配用term