Elastic Search快速上手(4):細節補充

模糊搜索

能夠進行模糊搜索:html

GET job/type1/_search
{
  "query":{
    "fuzzy":{
      "title":{
        "value":"linx",
        "fuzziness": 2,
        "prefix_length": 1
      }
    }
  }
}

在上面的例子中,可模糊查詢與linx類似的單詞。
fuzziness是指「編輯距離」,就是說從一個字符串想要經過增刪改變換到另外一個字符串,須要操做的最少次數。好比,linux和linxu之間的編輯距離爲1,由於交換ux就能夠完成變換。
prefix_length是說多少位字符認爲是前綴。前綴部分必須徹底匹配。linux

搜索建議

搜索建議功能,須要配合程序,在向es中存入文檔時,就須要經過分詞等方式,指定搜索建議字段的內容。git

指定以後,可經過suggest方式,根據用戶的當前輸入,獲取搜索建議:github

GET wechatsearch/passage/_search
{
  "suggest":{
    "my-suggest":{
      "text":"ppt",
      "completion":{
        "field":"suggest",
        "fuzzy":{
          "fuzziness":2
        }
      }
    }
  },
  "_source": "ptitle"
}

上面代碼搜索出與ppt關鍵詞相近的搜索建議。其中,fuzziness值爲2,所以,像p2p、pdf之類的關鍵詞也會被搜索出來。較小的fuzziness會有更精確的匹配。web

返回結果示例:網站

{
  "took": 20,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": 0,
    "hits": []
  },
  "suggest": {
    "my-suggest": [
      {
        "text": "ppt",
        "offset": 0,
        "length": 3,
        "options": [
          {
            "text": "pdf",
            "_index": "wechatsearch",
            "_type": "passage",
            "_id": "16",
            "_score": 10,
            "_source": {
              "ptitle": "Smallpdf:無所不能的PDF在線處理站"
            }
          },
          {
            "text": "ppt",
            "_index": "wechatsearch",
            "_type": "passage",
            "_id": "7",
            "_score": 10,
            "_source": {
              "ptitle": "這18個技巧都不知道,別說你會作PPT"
            }
          },
          {
            "text": "pa",
            "_index": "wechatsearch",
            "_type": "passage",
            "_id": "10",
            "_score": 5,
            "_source": {
              "ptitle": "吐血整理了這20個堪稱神器的網站,個個都能解你燃眉之急"
            }
          }
        ]
      }
    ]
  }
}

搜索高亮

能夠指定哪些字段搜索高亮,而且指定高亮字符兩側的包裹標籤,從而實現查詢的返回結果包含html高亮效果。搜索引擎

GET /megacorp/employee/_search
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    },
    "highlight": {
        "fields" : {
            "about" : {}
        }
    }
}

注意,高亮的結果在返回時單獨存放,並非將_source數據作了改變。
單獨有一個highlight部分存放高亮內容:spa

{
   ...
   "hits": {
      "total":      1,
      "max_score":  0.23013961,
      "hits": [
         {
            ...
            "_score":         0.23013961,
            "_source": {
               "first_name":  "John",
               "last_name":   "Smith",
               "age":         25,
               "about":       "I love to go rock climbing",
               "interests": [ "sports", "music" ]
            },
            "highlight": {
               "about": [
                  "I love to go <em>rock</em> <em>climbing</em>" 
               ]
            }
         }
      ]
   }
}

關於ES的入門使用暫時整理到這裏。
ES的官方文檔是最好的參考資料,介紹很全面。3d


完成這些文檔的同時,作了一個簡單的小項目,基於Python(Django)的web搜索界面,採用ES做爲搜索引擎。
此項目地址:
https://github.com/dox1994/We...rest

搜索提示:
clipboard.png

搜索結果:
clipboard.png

相關文章
相關標籤/搜索