结构化查询语句DSL的使用,bool,filter查询等
新增数据集
curl -XPUT -H "Content-Type: application/json" 'localhost:9201/blog/article/7?pretty' -d '
{
"title": "elk搭建日志采集系统",
"content":"elk elasticsearch logstash kibana",
"PV":18
}'
什么是query DSL
1、Domain Specific Language 领域特定语言
2、Elasticsearch提供了完整的查询DSL,基于JSON定义查询
3、用于构造复杂的查询语句
url查询(空格处理不当,会出问题)
curl -XPOST -H "Content-Type: application/json" 'http://localhost:9201/blog/article/_search' -d '{
"query" : {
"term" : { "title" : "elk" }
}
}'
建议使用postman工具
post方式提交,增加http头信息
body里面选row格式,粘贴对应的dsl即可
bool查询入门
{
"query": {
"bool": {
"must": [
{ "match": { "title": "elk" } }
],
"must_not": [
{ "match": { "title": "小D" } }
]
}
}
}
filter查询入门(filtered语法已经在5.0版本后移除了,在2.0时候标记过期,改用filter )
参考地址:https://www.elastic.co/guide/en/elasticsearch/reference/5.0/query-dsl-filtered-query.html
{
"query": {
"bool": {
"filter": {
"range": {
"PV": {
"gt": 15
}
}
},
"must": {
"match": {
"title": "ELK"
}
}
}
}
}
总结:(官网参考 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html)
1、大部分filter的速度快于query的速度
2、filter不会计算相关度得分,且结果会有缓存,效率高
3、全文搜索、评分排序,使用query
4、是非过滤,精确匹配,使用filter