深入探究ES Fuzzy

一、什麼是ES Fuzzy

ES Fuzzy是Elasticsearch中實現模糊搜索的一種技術,它可以處理用戶輸入中潛在的拼寫錯誤或者單詞變形,從而提高搜索結果的準確率。

與傳統的全文搜索不同,ES Fuzzy可以考慮到單詞之間的相似度以及單詞本身的模糊匹配,將不同的查詢和文檔之間建立關聯,提高搜索的效果。

ES Fuzzy的核心思想是使用編輯距離算法來計算查詢中的單詞與文檔中的單詞之間的相似度。編輯距離是指將查詢單詞通過添加、刪除、替換等操作轉換為文檔中的單詞所需的最小步數。通過設置一個合理的閾值,可以使得查詢單詞和文檔單詞之間的編輯距離小於該閾值的文檔被返回。

二、ES Fuzzy的特性

1、支持多種模糊匹配方式

ES Fuzzy支持多種模糊匹配方式,例如:

  GET /_search
  {
      "query": {
          "fuzzy": {
              "company_name": {
                  "value": "toglloom",
                  "fuzziness": "AUTO"
              }
          }
      }
  }

其中,fuzziness參數可以設置為AUTO、1、2等,表示不同的模糊匹配方式。

2、支持指定編輯距離

編輯距離是指從一個單詞變成另一個單詞所需的最小操作數。在ES Fuzzy中,可以通過fuzziness參數來指定所需的編輯距離。

  GET /_search
  {
      "query": {
          "fuzzy": {
              "age": {
                  "value": "2",
                  "fuzziness": 1
              }
          }
      }
  }

上面的查詢請求會返回年齡等於2、或者編輯距離為1的文檔。

3、支持前綴匹配和後綴匹配

ES Fuzzy可以進行前綴匹配和後綴匹配,指定prefix_length可以控制前綴匹配的長度,而suffix_length可以控制後綴匹配的長度。

  GET /_search
  {
      "query": {
          "fuzzy": {
              "company_name": {
                  "value": "googl",
                  "fuzziness": 1,
                  "prefix_length": 3,
                  "max_expansions": 20
              }
          }
      }
  }

三、ES Fuzzy的應用場景

ES Fuzzy可以應用於很多搜索場景中,例如:

1、搜索引擎中的拼寫糾錯。

拼寫糾錯一直是搜索引擎中的重要問題。ES Fuzzy可以很好地解決這個問題,從而提高相關搜索結果的準確率。

2、搜索商品名稱或者描述。

商品名稱或者描述中常常會出現拼寫錯誤,使用ES Fuzzy可以將這些錯誤考慮在內,從而提高商品搜索結果的準確率。

3、搜索人名或者地名。

人名和地名常常會因為語言和拼寫規則的差異而出現拼寫錯誤,ES Fuzzy可以將這些錯誤考慮在內,從而提高搜索結果的準確率。

四、ES Fuzzy示例代碼

  GET /index/type/_search
  {
    "query": {
      "fuzzy": {
        "name": {
          "value": "jems",
          "fuzziness": "AUTO"
        }
      }
    }
  }

上面的示例中,我們使用ES Fuzzy來搜索name字段等於jems的文檔,其中fuzziness參數設置為AUTO,即自動匹配模糊匹配程度。

原創文章,作者:YRMW,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/134725.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YRMW的頭像YRMW
上一篇 2024-10-04 00:07
下一篇 2024-10-04 00:07

相關推薦

  • Spark集成ES開發

    本文將介紹如何使用Spark集成ES進行數據開發和分析。 一、系統概述 Spark是一個基於內存的分布式計算系統,可以快速地處理大量數據。而ES(ElasticSearch)則是一…

    編程 2025-04-28
  • Helm部署ES CrashLoopBackOff

    如果你在使用Helm部署ES時遇到CrashLoopBackOff問題,那麼本文將對這一問題進行詳細解答。我們將從以下方面進行闡述: 一、問題分析與定位 在使用Helm部署ES時,…

    編程 2025-04-27
  • 深入解析Vue3 defineExpose

    Vue 3在開發過程中引入了新的API `defineExpose`。在以前的版本中,我們經常使用 `$attrs` 和` $listeners` 實現父組件與子組件之間的通信,但…

    編程 2025-04-25
  • 深入理解byte轉int

    一、字節與比特 在討論byte轉int之前,我們需要了解字節和比特的概念。字節是計算機存儲單位的一種,通常表示8個比特(bit),即1字節=8比特。比特是計算機中最小的數據單位,是…

    編程 2025-04-25
  • 深入理解Flutter StreamBuilder

    一、什麼是Flutter StreamBuilder? Flutter StreamBuilder是Flutter框架中的一個內置小部件,它可以監測數據流(Stream)中數據的變…

    編程 2025-04-25
  • 深入探討OpenCV版本

    OpenCV是一個用於計算機視覺應用程序的開源庫。它是由英特爾公司創建的,現已由Willow Garage管理。OpenCV旨在提供一個易於使用的計算機視覺和機器學習基礎架構,以實…

    編程 2025-04-25
  • 深入了解scala-maven-plugin

    一、簡介 Scala-maven-plugin 是一個創造和管理 Scala 項目的maven插件,它可以自動生成基本項目結構、依賴配置、Scala文件等。使用它可以使我們專註於代…

    編程 2025-04-25
  • 深入了解LaTeX的腳註(latexfootnote)

    一、基本介紹 LaTeX作為一種排版軟件,具有各種各樣的功能,其中腳註(footnote)是一個十分重要的功能之一。在LaTeX中,腳註是用命令latexfootnote來實現的。…

    編程 2025-04-25
  • 深入了解Python包

    一、包的概念 Python中一個程序就是一個模塊,而一個模塊可以引入另一個模塊,這樣就形成了包。包就是有多個模塊組成的一個大模塊,也可以看做是一個文件夾。包可以有效地組織代碼和數據…

    編程 2025-04-25
  • 深入理解Python字符串r

    一、r字符串的基本概念 r字符串(raw字符串)是指在Python中,以字母r為前綴的字符串。r字符串中的反斜杠(\)不會被轉義,而是被當作普通字符處理,這使得r字符串可以非常方便…

    編程 2025-04-25

發表回復

登錄後才能評論