天天看點

Elasticsearch搜尋詳解(六):文字檢索

文字檢索是關系型資料庫(如 MySQL)的弱項,而恰恰是 ES 的強項。前一篇文章已經提到了 match、term,除此之外還有multi_match、match_phrace 等,分别的含義是:

match

        從一個字段中檢索關鍵字,包括模糊檢索、精準單詞檢索以及短語檢索。

match_phrase

        短語檢索。跟 match 相似,也是從一個字段中檢索文字,但是作為一個完整的短語檢索,不能拆分成為幾個單詞來檢索。

match_phrase_prefix

        略。

multi_match

        從多個字段中檢索關鍵字。其它與 match 相同。

common

query_string

simple_query_string

        略。

match 的例子

GET /_search
{
    "query": {
        "match" : {
            "message" : "this is a test"
        }
    }
}
           

多個字段可以寫上多個 match,外面套上 must、must_not 或者 should。例如

GET /_search
{
    "query": {
        "bool": {
            "should": [
                {  "match" : { "title" : "this is a test" } },
                {  "match" : { "content" : "this is a test" } }
            ]
        }
    }
}
           

multi_match 的例子

上面的例子用 multi_match 的寫法

GET /_search
{
  "query": {
    "multi_match" : {
      "query":    "this is a test",
      "fields": [ "title", "message" ],
      "type": "most_fields"
    }
  }
}
           

如果省略 fields,表示将從全部字段中檢索關鍵字。type 還有一種很常用的用法:best_fields,表示關鍵字都出現在同一個字段的文檔将獲得高的 _score。

match_phrace 的例子

match_phrace 和 match 的用法類似。不同的是,match_phrace 搜尋的是完整的詞組。例如搜尋文字“程式設計語言”,match 将文字拆成兩個單詞“程式設計”和“語言”,比對到的文檔兩個關鍵字不必連在一起。而 match_phrace 要求關鍵字連在一起,而且剛好就是“程式設計語言”。如果用 MySQL 來做類比,match 更像模糊比對,而 match_phrace 就是精确比對。

繼續閱讀