Elasticsearch提供了一个可以执行查询的Json风格的DSL(domain-specific language领域特定语言)。这个被称为Query DSL,该查询语言非常全面,并且刚开始的时候感觉有点复杂,真正学好它的方法是从一些基础的示例开始的。
{
QUERY_NAME:{
ARGUMENT: VALUE,
ARGUMENT: VALUE,...
}
}
{
QUERY_NAME:{
FIELD_NAME:{
ARGUMENT: VALUE,
ARGUMENT: VALUE,...
}
}
}
{
"query":{
"match all":{}:
},
"from":0,
"size":5,
"sort":[
{
"account number": {
"order": "desc"
}
}
]
}
-
query定义如何查询,
-
match-all查询类型【代表查询所有的所有】,es中可以在query中组合非常多的查询类型完成复杂查询
-
除了query参数之外,我们也可以传递其它的参数以改变查询结果。如sort,size
-
from-size限定,完成分页功能
-
sort排序,多字段排序,会在前序字段相等时后续字段内部排序,否则以前序为准
2)、返回部分字段
{
"query":{
"match all":{}:
},
"sort":[
{
"account number": {
"order": "desc"
}
}
],
"from":0,
"size":5,
"_source":["age","balance"]
}
3)、match【匹配查询】
GET bank/_search
{
"query": {
"match": {
"account_number": "20"
}
}
}
match返回account_number=20的
GET bank/_search
{
"query": {
"match": {
"address": "mill"
}
}
}
最终查询出address中包含mill单词的所有记录
match当搜索字符串类型的时候,会进行全文检索,并且每条记录有相关性得分
GET bank/_search
{
"query": {
"match": {
"address": "mill load"
}
}
}
最终查询出address中包含mill或者road或者millroad的所有记录,并给出相关性得分
4)、match_phrase【短语匹配】
将需要匹配的值当成一个整体单词(不分词)进行检素
GET bank/_search
{
"query": {
"match_phrase": {
"address": "mill road"
}
}
}
查出address中包含millroad的所有记录,并给出相关性得分
5)、multi_match【多字段匹配】
GET bank/_search
{
"query": {
"multi_match": {
"query": "mill",
"fields": ["state","address"]
}
}
}
state或者address包含mill
6)、bool【复合查询】
bool用来做复合查询:复合语句可以合并任何其它查询语句,包括复合语句,了解这一点是很重要的。这就意味
GET bank/_search
{
"query": {
"bool": {
"must": [
{"match": {
"gender": "M"
}},
{"match": {
"address": "mill"
}}
],
"must_not": [
{"match": {
"age": "18"
}}
],
"should": [
{"match": {
"lastname": "Wallace"
}}
]
}
}
}
7)、filter【过滤查询】
GET bank/_search
{
"query": {
"bool": {
"filter": {
"range": {
"age": {
"gte": 18,
"lte": 30
}
}
}
}
}
}
可以达到和must,must not,should相同的结果,但是没有相关性得分
8)、term
和match一样。匹配某个属性的值。全文检索字段用match,其他非text字段匹配用term