教程目录帖
http://www.sufeinet.com/thread-24643-1-1.html
4-Elasticsearch查询表达式和复杂查询的使用
使用查询表达式来完成搜索
Query-sring 搜索通过命令非方便的进行临时性的即席搜索,但它也有自身的局限性,而Elasticsearch提示了一个丰富的查询语言,叫做“查询表达式”
能实现更加复杂和健壮的查询
我们可以将之前文章中的wmith的搜索重写使用Json的格式 来完成,如下、
[Shell] 纯文本查看 复制代码 GET /megacorp/employee/_search
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}
返回结果与之前的查询一样,但还是可以看到有一些变化。其中之一是,不再使用 query-string 参数,而是一个请求体替代。这个请求使用 JSON 构造,并使用了一个 match 查询(属于查询类型之一,后续将会了解)
更复杂一些的查询我们来看一个例子
现在尝试下更复杂的搜索。 同样搜索姓氏为 Smith 的雇员,但这次我们只需要年龄大于 30 的。查询需要稍作调整,使用过滤器 filter ,它支持高效地执行一个结构化查询
[Shell] 纯文本查看 复制代码 GET /megacorp/employee/_search
{
"query" : {
"bool": {
"must": {
"match" : {
"last_name" : "smith"
}
},
"filter": {
"range" : {
"age" : { "gt" : 30 }
}
}
}
}
}
这部分与我们之前使用的 match 查询 一样。
这部分是一个 range 过滤器 , 它能找到年龄大于 30 的文档,其中 gt 表示_大于(_great than)。
目前无需太多担心语法问题,后续会更详细地介绍。只需明确我们添加了一个 过滤器 用于执行一个范围查询,并复用之前的 match 查询。现在结果只返回了一个雇员,叫 Jane Smith,32 岁。
[Shell] 纯文本查看 复制代码 {
...
"hits": {
"total": 1,
"max_score": 0.30685282,
"hits": [
{
...
"_source": {
"first_name": "Jane",
"last_name": "Smith",
"age": 32,
"about": "I like to collect rock albums",
"interests": [ "music" ]
}
}
]
}
}
其实说白了,说是查询语句可以使用一个Json结构来完成,这与Mongodb有点类似,可以更活多变一些。
|