深入探究ES高亮

一、高亮的作用

ES高亮是一種在搜索結果中標識用戶查詢的關鍵詞的方法,此功能廣泛應用於搜索引擎和文本編輯器中。在搜索結果列表中,高亮文本可以幫助用戶快速找到相關的信息,提高搜索效率。在文本編輯器中,高亮文本可以幫助用戶識別不同的代碼語言,減少錯誤。

二、高亮實現的兩種方式

1. 基於字段高亮

基於字段高亮是指將搜索結果中匹配的關鍵詞標記,只標記匹配的字段。可以通過設置字段映射和搜索時指定搜索字段來實現。

PUT my_index/_mapping
{
  "properties": {
    "content": {
      "type": "text",
      "analyzer": "standard"
    }
  }
}

GET my_index/_search
{
  "query": {
    "match": {
      "content": "es 高亮"
    }
  },
  "highlight": {
    "fields": {
      "content": {}
    }
  }
}

2. 基於查詢高亮

基於查詢高亮是指將搜索結果中匹配的關鍵詞標記,包括所有匹配的部分,不只是字段中匹配的部分。可以通過在查詢中指定高亮選項來實現。

GET my_index/_search
{
  "query": {
    "match": {
      "content": "es 高亮"
    }
  },
  "highlight": {
    "require_field_match": false,
    "fields": {
      "content": {}
    }
  }
}

三、高亮的配置選項

1. 簡單配置

可以使用默認的高亮選項,只需要在查詢中添加highlight字段即可。

GET my_index/_search
{
  "query": {
    "match": {
      "content": "es 高亮"
    }
  },
  "highlight": {}
}

2. 定製標記樣式

可以通過設置pre_tags和post_tags選項來定製標記的樣式。

GET my_index/_search
{
  "query": {
    "match": {
      "content": "es 高亮"
    }
  },
  "highlight": {
    "pre_tags": [""],
    "post_tags": [""],
    "fields": {
      "content": {}
    }
  }
}

3. 控制標記數量

可以通過設置fragment_size和number_of_fragments選項來控制每個字段的標記數量和標記的大小。

GET my_index/_search
{
  "query": {
    "match": {
      "content": "es 高亮"
    }
  },
  "highlight": {
    "fields": {
      "content": {
        "fragment_size": 100,
        "number_of_fragments": 3
      }
    }
  }
}

4. 針對不同字段設置不同選項

可以為不同的字段設置不同的高亮選項,只需要在highlight選項中指定每個字段的配置。

GET my_index/_search
{
  "query": {
    "match": {
      "content": "es 高亮"
    }
  },
  "highlight": {
    "fields": {
      "title": {"pre_tags": [""], "post_tags": [""]},
      "content": {"pre_tags": [""], "post_tags": [""], "number_of_fragments": 3}
    }
  }
}

四、高亮的性能優化

1. 使用緩存

ES高亮對於大量數據或者複雜查詢非常消耗資源,可以通過禁用高亮緩存或者增加緩存大小來提高性能。

PUT my_index/_settings
{
  "index.highlight.max_analyzed_offset": 1000000,
  "index.highlight.max_phrase_window": 500
}

2. 避免不必要的高亮

可以使用pre_tags和post_tags選項來避免對不必要的字段進行高亮。

GET my_index/_search
{
  "query": {
    "match": {
      "title": "es 高亮"
    }
  },
  "highlight": {
    "fields": {
      "title": {"pre_tags": [], "post_tags": []},
      "content": {"pre_tags": [""], "post_tags": [""], "number_of_fragments": 3}
    }
  }
}

3. 壓縮標記文本

可以使用encoder選項來壓縮標記文本,減少網絡傳輸的數據量。

GET my_index/_search
{
  "query": {
    "match": {
      "content": "es 高亮"
    }
  },
  "highlight": {
    "encoder": "html",
    "fields": {
      "content": {}
    }
  }
}

五、總結

ES高亮是一種強大的搜索功能,可以幫助用戶快速找到相關信息。通過靈活的配置選項和性能優化,可以提高搜索效率和用戶體驗。

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
FESDF的頭像FESDF
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:05

相關推薦

  • 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
  • 深入探討馮諾依曼原理

    一、原理概述 馮諾依曼原理,又稱「存儲程序控制原理」,是指計算機的程序和數據都存儲在同一個存儲器中,並且通過一個統一的總線來傳輸數據。這個原理的提出,是計算機科學發展中的重大進展,…

    編程 2025-04-25

發表回復

登錄後才能評論