在Elasticsearch中,DSL(Domain Specific Language)是一种基于JSON格式的查询语言,用于表达复杂的搜索条件和操作。以下是一些基于DSL的查询实例:
1. Validate查询(验证查询语法)
验证一个查询DSL是否合法,而不实际执行查询。
POST /_validate/query
{
"explain": true, // 是否显示解释信息
"query": {
"match": {
"title": "Elasticsearch"
}
}
}
2. Match查询
最基础的全文本查询,匹配指定字段中的文本。
GET /my_index/_search
{
"query": {
"match": {
"title": {
"query": "Elasticsearch tutorial",
"operator": "and" // 可选,默认为or,可以改为and来要求所有词都要匹配
}
}
}
}
3. Bool复合查询
Bool查询允许组合多个查询条件,支持must(必须满足)、should(至少满足一个)、must_not(必须不满足)子句。
GET /my_index/_search
{
"query": {
"bool": {
"must": [ // 必须满足以下条件
{"match": {"title": "Elasticsearch"}},
{"range": {"publish_date": {"gte": "2020-01-01"}}}
],
"should": [ // 至少满足一个
{"match_phrase": {"summary": "getting started"}}
],
"must_not": [ // 必须不满足以下条件
{"term": {"status": "draft"}}
]
}
}
}
4. 更复杂的查询示例(包含filter上下文)
GET /my_index/_search
{
"query": {
"bool": {
"must": [
{"match": {"title": "Elasticsearch"}},
{"range": {"publish_date": {"gte": "now-1y"}}}
],
"filter": [ // 过滤器不影响评分,只筛选文档
{"term": {"category": "tutorials"}},
{"terms": {"tags": ["elasticsearch", "search"]}}
]
}
},
"sort": [
{"publish_date": {"order": "desc"}}
],
"size": 10
}
以上实例展示了如何使用Elasticsearch的DSL进行基本查询和复合查询。在实际应用中,根据业务需求可以组合更多的查询条件和过滤条件,以及配合使用聚合(Aggregations)进行数据统计分析。