Easticsearch官網《Elasticsearch權威指南》筆記3——搜尋
阿新 • • 發佈:2019-02-09
使用DSL查詢
除了使用查詢字串查詢,ES還可以使用DSL領域特定語言構造查詢,使用JSON格式。
GET /megacorp/employee/_search
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}
查詢字串被一個JSON代替,並使用了match
查詢(屬於查詢型別之一)。
更復雜的查詢
再增加一個條件,要求年齡大於30
GET /megacorp/employee/_search
{
"query" : {
"bool" : {
"must": {
"match" : {
"last_name" : "smith"
}
},
"filter": {
"range" : {
"age" : { "gt" : 30 }
}
}
}
}
}
結果
{
...
"hits": {
"total" : 2,
"max_score": 0.16273327,
"hits": [
{
...
"_score": 0.16273327,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": 25,
"about": "I love to go rock climbing" ,
"interests": [ "sports", "music" ]
}
},
{
...
"_score": 0.016878016,
"_source": {
"first_name": "Jane",
"last_name": "Smith",
"age": 32,
"about": "I like to collect rock albums",
"interests": [ "music" ]
}
}
]
}
}
Elasticsearch 預設按照相關性得分(_score
屬性)排序,即每個文件跟查詢的匹配程度。
預設不是精確搜尋,而是相關性搜尋
精確短語搜尋
為此對 match 查詢稍作調整,使用一個叫做 match_phrase 的查詢:
GET /megacorp/employee/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
}
}
搜尋結果高亮
在查詢前增加一個新的highlight
引數
GET /megacorp/employee/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
},
"highlight": {
"fields" : {
"about" : {}
}
}
}