ES分詞結果查看:從多維度全面剖析

隨著全球信息技術的飛速發展,搜索引擎的重要性越來越凸顯。而Elasticsearch (ES)已經成為如今世界上最流行的開源搜索引擎之一。在這個高度競爭的市場中,如何在海量數據中快速查找到所需信息已經成為關注的重點。而對於搜索引擎來說,分詞器是其中一環非常重要的組成部分。本文從多個角度探討如何使用ES查看分詞結果。

一、es查看分詞器

分詞器是ES用於分解文本並將其轉換為可索引詞條的演算法。ES提供了一些內置分詞器,還有很多可用於不同語言或情況的第三方分詞器。可以使用_mappings API查看當前索引的所有分詞器。

GET /_mappings

額外的,也可以使用_settings API查看當前分詞器的設置:

GET /_settings

使用above API可以很容易地查看到當前索引中使用哪些分詞器。

二、es查看分詞器列表

ES中內置的分詞器有:Standard、Simple、Whitespace、Language、Stop、Keyword、Pattern、Fingerprint。多數情況下,Standard(默認)分詞器已經足夠使用,但對於一些特殊的需求,比如中文分詞,需要選擇合適的第三方分詞器。比如,對於中文文本,默認的Standard分詞器無法完整的將漢字切成單個的詞語,一個中文詞就會被切分成多個和上下文不自然的詞語。ES中提供了一些常用的中文分詞器,例如IKAnalyzer、smartcn、jieba等。

可以使用_analyze API來測試分詞器在某些文本上的分詞效果。例如測試中文分詞器:

POST /_analyze
{
    "analyzer": "ik_smart",
     "text": "中國是一個偉大的國家"
}

執行完以上代碼後,返回結果如下:

{
  "tokens" : [
    {
      "token" : "中國",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD"
    },
    {
      "token" : "是",
      "start_offset" : 2,
      "end_offset" : 3,
      "type" : "CN_WORD"
    },
    {
      "token" : "一個",
      "start_offset" : 3,
      "end_offset" : 5,
      "type" : "CN_WORD"
    },
    {
      "token" : "偉大",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "CN_WORD"
    },
    {
      "token" : "的",
      "start_offset" : 8,
      "end_offset" : 9,
      "type" : "CN_WORD"
    },
    {
      "token" : "國家",
      "start_offset" : 9,
      "end_offset" : 11,
      "type" : "CN_WORD"
    }
  ]
}

三、es查看分詞效果

分詞器對於搜索引擎的關鍵性作用已經是任誰都清楚的了。而查看分詞結果也是非常關鍵的一個步驟。了解分詞器在真實數據上的實際效果有助於我們選擇合適的分詞器,提高搜索效果。下面讓我們來看一個實際案例:

假設我們要對下面的文本進行分詞:

The quick brown fox jumps over the lazy dog.

如果使用默認的Standard分詞器,那麼其分詞結果如下:

{
  "tokens": [
    {
      "token": "the",
      "start_offset": 0,
      "end_offset": 3,
      "type": ""
    },
    {
      "token": "quick",
      "start_offset": 4,
      "end_offset": 9,
      "type": ""
    },
    {
      "token": "brown",
      "start_offset": 10,
      "end_offset": 15,
      "type": ""
    },
    {
      "token": "fox",
      "start_offset": 16,
      "end_offset": 19,
      "type": ""
    },
    {
      "token": "jumps",
      "start_offset": 20,
      "end_offset": 25,
      "type": ""
    },
    {
      "token": "over",
      "start_offset": 26,
      "end_offset": 30,
      "type": ""
    },
    {
      "token": "the",
      "start_offset": 31,
      "end_offset": 34,
      "type": ""
    },
    {
      "token": "lazy",
      "start_offset": 35,
      "end_offset": 39,
      "type": ""
    },
    {
      "token": "dog",
      "start_offset": 40,
      "end_offset": 43,
      "type": ""
    }
  ]
}

我們可以看到,該分詞結果只是簡單地將英文字元串分割成單詞,但對於短語和多詞的分詞卻比較弱。此時,我們可以選擇其他分詞器來查看其效果。例如使用Whitespace分詞器:

POST /_analyze
{
  "analyzer": "whitespace",
  "text": "The quick brown fox jumps over the lazy dog."
}

該分詞器分詞結果如下:

{
  "tokens": [
    {
      "token": "The",
      "start_offset": 0,
      "end_offset": 3,
      "type": "word"
    },
    {
      "token": "quick",
      "start_offset": 4,
      "end_offset": 9,
      "type": "word"
    },
    {
      "token": "brown",
      "start_offset": 10,
      "end_offset": 15,
      "type": "word"
    },
    {
      "token": "fox",
      "start_offset": 16,
      "end_offset": 19,
      "type": "word"
    },
    {
      "token": "jumps",
      "start_offset": 20,
      "end_offset": 25,
      "type": "word"
    },
    {
      "token": "over",
      "start_offset": 26,
      "end_offset": 30,
      "type": "word"
    },
    {
      "token": "the",
      "start_offset": 31,
      "end_offset": 34,
      "type": "word"
    },
    {
      "token": "lazy",
      "start_offset": 35,
      "end_offset": 39,
      "type": "word"
    },
    {
      "token": "dog.",
      "start_offset": 40,
      "end_offset": 44,
      "type": "word"
    }
  ]
}

從上述結果中,我們可以看出,使用Whitespace分詞器將原始文本按照空格進行分詞,分詞後的單詞中保留了英文句點(”.”)。

四、查看es分詞器

對於ES默認提供的分詞器,可以使用以下命令進行查看:

GET _cat/indices?v&h=index,creation.date.string,uuid,p

以上命令將會返回索引的列表和其中使用的Primary Shard數量,如果想在此列表中查看分詞器,切換到該索引,可以使用_mappings API或_settings API來查看。而對於已經本地安裝的一些第三方分詞器,我們可以從GitHub上尋找並安裝使用。

五、結果檢索與高亮

分詞器不僅可以將文本分解成辭彙,搜索引擎也需要通過搜索查詢的文本來匹配索引中的文本內容,然後返回最相關的結果。在這個過程中,允許我們使用一些高級功能,比如自定義查詢、規則匹配、摘要摘錄或者是高亮等。ES提供的強大搜索API允許我們實現高級搜索和精確匹配。本文不再對此進行詳細介紹,大家可以自行學習。

六、總結

在ES搜索引擎中,分詞器是其中非常重要的一個組成部分。在進行搜索之前,了解分詞器的設置,查看分詞器的類型、效果可以幫助我們優化搜索結果,更好地匹配查詢文本。本文從查看分詞器、分詞器列表、分詞效果、結果檢索與高亮等多個角度探討了ES中如何查看分詞結果的相關內容,希望對大家有所幫助。

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

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

相關推薦

  • Python應用程序的全面指南

    Python是一種功能強大而簡單易學的編程語言,適用於多種應用場景。本篇文章將從多個方面介紹Python如何應用於開發應用程序。 一、Web應用程序 目前,基於Python的Web…

    編程 2025-04-29
  • Python zscore函數全面解析

    本文將介紹什麼是zscore函數,它在數據分析中的作用以及如何使用Python實現zscore函數,為讀者提供全面的指導。 一、zscore函數的概念 zscore函數是一種用於標…

    編程 2025-04-29
  • 全面解讀數據屬性r/w

    數據屬性r/w是指數據屬性的可讀/可寫性,它在程序設計中扮演著非常重要的角色。下面我們從多個方面對數據屬性r/w進行詳細的闡述。 一、r/w的概念 數據屬性r/w即指數據屬性的可讀…

    編程 2025-04-29
  • Python計算機程序代碼全面介紹

    本文將從多個方面對Python計算機程序代碼進行詳細介紹,包括基礎語法、數據類型、控制語句、函數、模塊及面向對象編程等。 一、基礎語法 Python是一種解釋型、面向對象、動態數據…

    編程 2025-04-29
  • Matlab二值圖像全面解析

    本文將全面介紹Matlab二值圖像的相關知識,包括二值圖像的基本原理、如何對二值圖像進行處理、如何從二值圖像中提取信息等等。通過本文的學習,你將能夠掌握Matlab二值圖像的基本操…

    編程 2025-04-28
  • Python多維列表的生成

    本篇文章將從多個方面詳細闡述Python中多維列表的生成方法。 一、基礎方法 Python中可以使用嵌套列表的方式實現多維列表的生成,例如: multi_list = [[0 fo…

    編程 2025-04-28
  • 瘋狂Python講義的全面掌握與實踐

    本文將從多個方面對瘋狂Python講義進行詳細的闡述,幫助讀者全面了解Python編程,掌握瘋狂Python講義的實現方法。 一、Python基礎語法 Python基礎語法是學習P…

    編程 2025-04-28
  • 全面解析Python中的Variable

    Variable是Python中常見的一個概念,是我們在編程中經常用到的一個變數類型。Python是一門強類型語言,即每個變數都有一個對應的類型,不能無限制地進行類型間轉換。在本篇…

    編程 2025-04-28
  • Zookeeper ACL 用戶 anyone 全面解析

    本文將從以下幾個方面對Zookeeper ACL中的用戶anyone進行全面的解析,並為讀者提供相關的示例代碼。 一、anyone 的作用是什麼? 在Zookeeper中,anyo…

    編程 2025-04-28
  • Switchlight的全面解析

    Switchlight是一個高效的輕量級Web框架,為開發者提供了簡單易用的API和豐富的工具,可以快速構建Web應用程序。在本文中,我們將從多個方面闡述Switchlight的特…

    編程 2025-04-28

發表回復

登錄後才能評論