1. 程式人生 > >Easticsearch官網《Elasticsearch權威指南》筆記3——搜尋

Easticsearch官網《Elasticsearch權威指南》筆記3——搜尋

使用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" : {}
        }
    }
}