溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用ElasticSearch 怎么實現全文搜索

發布時間:2021-07-24 17:39:18 來源:億速云 閱讀:329 作者:Leah 欄目:編程語言

使用ElasticSearch 怎么實現全文搜索,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。


match query 會對查詢語句進行分詞,分詞后,如果查詢語句中的任何一個詞項被匹配,則文檔就會被索引到。

GET books/_search
{
  "query": {
    "match": {
      "name": "美術計算機"
    }
  }
}
 

這個查詢首先會對 美術計算機 進行分詞,分詞之后,再去查詢,只要文檔中包含一個分詞結果,就回返回文檔。換句話說,默認詞項之間是 OR 的關系,如果想要修改,也可以改為 AND。

GET books/_search
{
  "query": {
    "match": {
      "name": {
        "query": "美術計算機",
        "operator": "and"
      }
    }
  }
}
 

此時就回要求文檔中必須同時包含 美術計算機 兩個詞。

 

15.2 match_phrase query

match_phrase query 也會對查詢的關鍵字進行分詞,但是它分詞后有兩個特點:

  • 分詞后的詞項順序必須和文檔中詞項的順序一致
  • 所有的詞都必須出現在文檔中

示例如下:

GET books/_search
{
  "query": {
    "match_phrase": {
        "name": {
          "query": "十一五計算機",
          "slop": 7
        }
    }
  }
}
 

query 是查詢的關鍵字,會被分詞器進行分解,分解之后去倒排索引中進行匹配。

slop 是指關鍵字之間的最小距離,但是注意不是關鍵之間間隔的字數。文檔中的字段被分詞器解析之后,解析出來的詞項都包含一個 position 字段表示詞項的位置,查詢短語分詞之后 的 position 之間的間隔要滿足 slop 的要求。

 

15.3 match_phrase_prefix query

這個類似于 match_phrase query,只不過這里多了一個通配符,match_phrase_prefix 支持最后一個詞項的前綴匹配,但是由于這種匹配方式效率較低,因此大家作為了解即可。

GET books/_search
{
  "query": {
    "match_phrase_prefix": {
      "name": "計"
    }
  }
}
 

這個查詢過程,會自動進行單詞匹配,會自動查找以開始的單詞,默認是 50 個,可以自己控制:

GET books/_search
{
  "query": {
    "match_phrase_prefix": {
      "name": {
        "query": "計",
        "max_expansions": 3
      }
    }
  }
}
 

match_phrase_prefix 是針對分片級別的查詢,假設 max_expansions 為 1,可能返回多個文檔,但是只有一個詞,這是我們預期的結果。有的時候實際返回結果和我們預期結果并不一致,原因在于這個查詢是分片級別的,不同的分片確實只返回了一個詞,但是結果可能來自不同的分片,所以最終會看到多個詞。

 

15.4 multi_match query

match 查詢的升級版,可以指定多個查詢域:

GET books/_search
{
  "query": {
    "multi_match": {
      "query": "java",
      "fields": ["name","info"]
    }
  }
}
 

這種查詢方式還可以指定字段的權重:

GET books/_search
{
  "query": {
    "multi_match": {
      "query": "陽光",
      "fields": ["name^4","info"]
    }
  }
}
 

這個表示關鍵字出現在 name 中的權重是出現在 info 中權重的 4 倍。

 

15.5 query_string query

query_string 是一種緊密結合 Lucene 的查詢方式,在一個查詢語句中可以用到 Lucene 的一些查詢語法:

GET books/_search
{
  "query": {
    "query_string": {
      "default_field": "name",
      "query": "(十一五) AND (計算機)"
    }
  }
}
   

15.6 simple_query_string

這個是 query_string 的升級,可以直接使用 +、|、- 代替 AND、OR、NOT 等。

GET books/_search
{
  "query": {
    "simple_query_string": {
      "fields": ["name"],
      "query": "(十一五) + (計算機)"
    }
  }
}
 


看完上述內容,你們掌握使用ElasticSearch 怎么實現全文搜索的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女