隨着全球信息技術的飛速發展,搜索引擎的重要性越來越凸顯。而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-hant/n/138055.html