导语
用于特定的搜索时从命令行查询字符串搜索是十分方便的,但它有其局限性(见 Elasticsearch(7)实践三-简单检索 )。Elasticsearch提供了丰富、灵活的查询语言,我们称之为DSL-允许我们建立更加复杂的、健壮的查询。
特定域查询语言
DSL( domain-specific language)
特定领域语言(DSL)是使用JSON请求主体去指定。我们可以代表像这样所有Smyths以前的搜索:
GET /megacorp/employee/_search
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}
这与前面的查询将返回相同的结果。你可以看到,很多事情发生了变化。首先,我们不再使用查询字符串参数,而是使用请求主体。这个请求主体是以JSON来构建的,使用match
查询(查询的几种类型之一,我们将稍后学习)。
实践-DSL语言查询例子
在sence中,输入如下的curl请求代码
curl -XGET 'localhost:9200/megacorp/employee/_search?pretty' -d'
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}'
查询的特定领域是last_name
结果如图所示:
完整返回信息如下:
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0.30685282,
"hits": [
{
"_index": "megacorp",
"_type": "employee",
"_id": "2",
"_score": 0.30685282,
"_source": {
"first_name": "Jane",
"last_name": "Smith",
"age": 32,
"about": "I like to collect rock albums",
"interests": [
"music"
]
}
},
{
"_index": "megacorp",
"_type": "employee",
"_id": "1",
"_score": 0.30685282,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": 25,
"about": "I love to go rock climbing",
"interests": [
"sports",
"music"
]
}
}
]
}
}
返回的_score是匹配程度
结语
本文主要是给出一个例子,是关于特定域(DSL)查询的例子,这也是一个比较常见的查询例子。