1. 程式人生 > >Elasticsearch不同的搜尋型別之間的區別

Elasticsearch不同的搜尋型別之間的區別

1、match 輕量級搜尋

{
  "query": {
    "match": {
       "title": "王陽明"
    }
  }
}

上面的查詢匹配就會進行分詞,比如"王陽明"會被ik分詞器分為"王陽明" ,“陽明”, “王”,“陽”,“明” 那麼所有包含這些詞中的一個或多個的文件就會被搜尋出來。並且根據lucene的評分機制(TF/IDF)來進行評分。

2、match_phrase 短語搜尋

{
  "query": {
    "match_phrase": {
      "title": "王陽明"
    }
  }
}

match_phrase要求只匹配上"王陽明"這個短語,完全匹配可能比較嚴,我們會希望有個可調節因子,少匹配一個也滿足,那就需要使用到slop

{
  "query": {
    "match_phrase": {
        "title" : {
            "query" : "王陽明",
            "slop" : 1
        }
    }
  }
}

3、multi_match 多欄位匹配

如果我們希望兩個或兩個以上的欄位進行匹配,其中一個欄位能匹配上就滿足的話,使用multi_match

{
  "query": {
    "multi_match": {
      "query": "王陽明第三卷",
      "fields": [
        "title",
        "keywords",
        "author"
      ]
    }
  }
}

multi_match中有三種類型即: best_fields 、 most_fields 和 cross_fields (最佳欄位、多數字段、跨欄位)
(1) 我們希望完全匹配的文件佔的評分比較高,則需要使用best_fields,multi_match預設是best_fields

{
  "query": {
    "multi_match": {
      "query": "王陽明",
      "fields": [
        "title",
        "yearAlias"
      ],
      "minimum_should_match": "70%"
    }
  }
}

(2) 我們希望越多欄位匹配的文件評分越高,就要使用most_fields

{
  "query": {
    "multi_match": {
      "query": "王陽明",
      "type": "most_fields",
      "fields": [
        "title",
        "keywords"
      ]
    }
  }
}

(3) 我們會希望這個詞條的分詞詞彙是分配到不同欄位中的,那麼就使用cross_fields

{
  "query": {
    "multi_match": {
      "query": "王陽明",
      "fields": [
        "title",
        "keywords"
      ],
      "type": "cross_fields"
    }
  },
  "highlight": {
    "fields": {
      "title": {
        "pre_tags": ["<a>" ],
        "post_tags": [ "</a>"]
      },
      "keywords": {
        "pre_tags": ["<b>" ],
        "post_tags": ["</b>" ]
      }
    }
  }
}

上面查詢語句中,包含了高亮顯示結果屬性:highligt

4、term 精確值查詢

{
  "query": {
    "term": {
      "title": "王陽明"
    }
  }
}

與match查詢類似,但term是精確查詢,代表完全匹配,即不進行分詞器分析,文件中必須包含整個搜尋的詞彙,但是 term 和 terms 是 必須包含(must contain) 操作,而不是必須精確相等(must equal exactly),當查詢 jack 時,[jack] 和[jack,jone]兩條資料都會被找到


原文:https://www.cnblogs.com/hoojjack/p/8600230.html