最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Elasticsearch外部詞庫(kù)文件更新及使用

 更新時(shí)間:2023年11月12日 16:41:38   作者:醉魚  
這篇文章主要為大家介紹了Elasticsearch外部詞庫(kù)文件更新及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

本文所使用的ES集群環(huán)境可在歷史文章中獲取,采用docker部署的方式。

Elasticsearch 是一個(gè)功能強(qiáng)大的搜索引擎,廣泛用于構(gòu)建復(fù)雜的全文搜索應(yīng)用程序。在許多情況下,為了提高搜索引擎的性能和精度,我們可以使用外部詞庫(kù)來(lái)定制和擴(kuò)展 Elasticsearch 的文本處理和搜索功能。本文將介紹外部詞庫(kù)的用途、優(yōu)勢(shì)以及如何在 Elasticsearch 中使用它們。

為什么需要外部詞庫(kù)?

Elasticsearch 默認(rèn)提供了一套強(qiáng)大的文本處理工具,包括分詞、標(biāo)記過(guò)濾、同義詞處理等。然而,在某些情況下,我們需要更多的控制權(quán)來(lái)適應(yīng)特定的用例和需求。外部詞庫(kù)允許我們:

  • 自定義分詞器:通過(guò)使用外部詞庫(kù),您可以創(chuàng)建自定義分詞器,以根據(jù)特定需求定義文本分割規(guī)則。這對(duì)于處理不同語(yǔ)言或行業(yè)的文本非常有用。
  • 擴(kuò)展停用詞列表:停用詞(如and、the等)通常被排除在搜索索引之外。外部詞庫(kù)允許您將領(lǐng)域特定的停用詞添加到索引中,以便更好地適應(yīng)我們行業(yè)內(nèi)的數(shù)據(jù)。
  • 同義詞處理:創(chuàng)建同義詞詞庫(kù)可確保相關(guān)詞匯在搜索時(shí)被正確映射,提高搜索結(jié)果的準(zhǔn)確性。
  • 專業(yè)術(shù)語(yǔ):對(duì)于特定領(lǐng)域或行業(yè),我們可以通過(guò)創(chuàng)建外部詞庫(kù),以包含特定領(lǐng)域的專業(yè)術(shù)語(yǔ),確保搜索引擎能夠理解和處理這些術(shù)語(yǔ)。

使用外部詞庫(kù)的優(yōu)勢(shì)

使用外部詞庫(kù)有以下優(yōu)勢(shì):

  • 提高搜索質(zhì)量:通過(guò)自定義分詞和停用詞,可以確保搜索引擎更好地理解和處理文本,提高搜索質(zhì)量。
  • 適應(yīng)特定需求:外部詞庫(kù)允許根據(jù)特定用例和領(lǐng)域需求對(duì)搜索引擎進(jìn)行定制,以滿足工作要求。
  • 更好的用戶體驗(yàn):通過(guò)包含專業(yè)術(shù)語(yǔ)和擴(kuò)展的同義詞映射,用戶能夠更輕松地找到他們需要的內(nèi)容。

如何在 Elasticsearch 中使用外部詞庫(kù)

在 Elasticsearch 中使用外部詞庫(kù)通常涉及以下步驟:

  • 創(chuàng)建外部詞庫(kù)文件:首先,我們需要準(zhǔn)備一個(gè)外部詞庫(kù)文件,其中包含自定義的詞匯、同義詞或停用詞列表。
  • 將詞庫(kù)上傳到 Elasticsearch:上傳詞庫(kù)文件到 Elasticsearch
  • 配置索引:將外部詞庫(kù)與索引相關(guān)聯(lián),以確保 Elasticsearch 在索引文檔時(shí)使用這些詞匯。
  • 搜索優(yōu)化:根據(jù)需要在搜索查詢中應(yīng)用外部詞庫(kù),以擴(kuò)展或定制搜索行為。

示例:使用自定義詞庫(kù)分詞

本文在 IK 分詞器的基礎(chǔ)上增加自定義分詞,并配置本地詞庫(kù)文件,遠(yuǎn)程熱更新詞庫(kù)文件。

本地詞庫(kù)

首先在啟動(dòng)的ES中對(duì)醉魚兩個(gè)字進(jìn)行分詞,IK 默認(rèn)分為兩個(gè)漢字

GET _analyze
{
  "analyzer": "ik_max_word",
  "text": ["醉魚"]
}

結(jié)果如下

{
  "tokens" : [
    {
      "token" : "醉",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_CHAR",
      "position" : 0
    },
    {
      "token" : "魚",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "CN_CHAR",
      "position" : 1
    }
  ]
}

而我們的需求是讓其能分為一次詞語(yǔ),而不是兩個(gè)漢字,那么下面引入我們的自定義分詞文件

在 ES 的 plugins/ik/config 目錄下創(chuàng)建自定義詞庫(kù)文件 zuiyu.dic,文件內(nèi)容如下,格式為一個(gè)詞語(yǔ)為一行。

醉魚

修改 IK 的配置,支持自定義分詞文件 ,修改plugins/ik/config 目錄下的IKAnalyzer.cfg.xml,修改其中<entry key="ext_dict"></entry>的值,為本地文件路徑,配置為相對(duì)路徑,直接填寫上一步創(chuàng)建的zuiyu.dic,結(jié)果如下

<entry key="ext_dict">zuiyu.dic</entry>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>IK Analyzer 擴(kuò)展配置</comment>
    <!--用戶可以在這里配置自己的擴(kuò)展字典 -->
    <entry key="ext_dict">zuiyu.dic</entry>
     <!--用戶可以在這里配置自己的擴(kuò)展停止詞字典-->
    <entry key="ext_stopwords"></entry>
    <!--用戶可以在這里配置遠(yuǎn)程擴(kuò)展字典 -->
    <!--<entry key="remote_ext_dict"></entry>-->
    <!--用戶可以在這里配置遠(yuǎn)程擴(kuò)展停止詞字典-->
    <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

如果是啟動(dòng)的ES集群,需要復(fù)制當(dāng)前兩個(gè)文件到所有的集群中

  • 1、當(dāng)前集群有三個(gè)節(jié)點(diǎn),其中都配置本地詞庫(kù)文件,但是node1node2中都沒(méi)有增加醉魚這詞語(yǔ),只有node3有,此時(shí)使用分詞是無(wú)法達(dá)到預(yù)期效果的。
  • 2、node1中配置正常的<entry key="ext_dict">zuiyu.dic</entry>zuiyu.dic中也包含醉魚這個(gè)詞語(yǔ)。node2,node3都不配置ext_dict,此時(shí)當(dāng)前這個(gè)環(huán)境是可以進(jìn)行正確分詞,達(dá)到預(yù)期的結(jié)果的。

重啟 ES

測(cè)試分詞效果,使用同樣的分詞語(yǔ)句

GET _analyze
{
  "analyzer": "ik_max_word",
  "text": ["醉魚"]
}

結(jié)果如下

{
  "tokens" : [
    {
      "token" : "醉魚",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    }
  ]
}

一般來(lái)說(shuō),詞語(yǔ)肯定不是固定的,隨著工作的長(zhǎng)期積累,不斷地發(fā)現(xiàn)新的專業(yè)術(shù)語(yǔ),那么熱更新,動(dòng)態(tài)更新詞庫(kù),不在每次更新詞庫(kù)之后重啟ES就是非常有必要的了,下面來(lái)看一下熱更新詞庫(kù)。

遠(yuǎn)程詞庫(kù)(熱更新)

熱更新詞庫(kù)的區(qū)別就是IKAnalyzer.cfg.xml文件中的一個(gè)配置的問(wèn)題。不過(guò)核心還是需要一個(gè)詞庫(kù)文件,剛才是通過(guò)路徑訪問(wèn)的,但是無(wú)法熱更新,所以現(xiàn)在需要改為URL訪問(wèn),也就是 HTTP 請(qǐng)求可以讀取到的形式。一個(gè)詞語(yǔ)一行返回即可。

此處使用 Nginx 來(lái)做演示。Nginx 中的配置如下

nginx.conf

location /dic/zuiyu.dic {
            alias   html/dic/zuiyu.dic;   
        }

zuiyu.dic 文件內(nèi)容如下

醉魚

IKAnalyzer.cfg.xml配置修改如下,IP為部署的 Nginx 的 IP ,端口也是根據(jù)自己 Nginx 監(jiān)聽(tīng)的端口修改

<entry key="remote_ext_dict">http://192.168.30.240:8088/dic/zuiyu.dic</entry>

完整的配置如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>IK Analyzer 擴(kuò)展配置</comment>
    <!--用戶可以在這里配置自己的擴(kuò)展字典 -->
    <entry key="ext_dict">zuiyu.dic</entry>
     <!--用戶可以在這里配置自己的擴(kuò)展停止詞字典-->
    <entry key="ext_stopwords"></entry>
    <!--用戶可以在這里配置遠(yuǎn)程擴(kuò)展字典 -->
    <entry key="remote_ext_dict">http://192.168.30.240:8088/dic/zuiyu.dic</entry>
    <!--用戶可以在這里配置遠(yuǎn)程擴(kuò)展停止詞字典-->
    <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
  • 驗(yàn)證URL訪問(wèn)結(jié)果,使用瀏覽器或者postman等工具訪問(wèn) http://192.168.30.240:8088/dic/zuiyu.dic 可以返回我們的文件內(nèi)容即可,也是一個(gè)詞語(yǔ)一行的形式。
  • 復(fù)制IKAnalyzer.cfg.xml 到集群的每個(gè)節(jié)點(diǎn)中
  • 重啟ES

測(cè)試對(duì) 醉魚 分詞,可以看到與上面本地詞庫(kù)時(shí)是同樣的效果

{
  "tokens" : [
    {
      "token" : "醉魚",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    }
  ]
}

測(cè)試對(duì)我愛(ài)你醉魚進(jìn)行分詞

GET _analyze
{
  "analyzer": "ik_max_word",
  "text": ["我愛(ài)你醉魚"]
}

結(jié)果如下

{
  "tokens" : [
    {
      "token" : "我愛(ài)你",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "愛(ài)你",
      "start_offset" : 1,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "醉魚",
      "start_offset" : 3,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 2
    }
  ]
}

zuiyu.dic中增加我愛(ài)你醉魚,最終的文件內(nèi)容如下

醉魚
我愛(ài)你醉魚

增加完成之后,這5個(gè)字已經(jīng)成為一個(gè)詞語(yǔ),分詞結(jié)果如下

{
  "tokens" : [
    {
      "token" : "我愛(ài)你醉魚",
      "start_offset" : 0,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "我愛(ài)你",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "愛(ài)你",
      "start_offset" : 1,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "醉魚",
      "start_offset" : 3,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 3
    }
  ]
}

僅在一個(gè)節(jié)點(diǎn) node1 中配置了遠(yuǎn)程詞庫(kù),node2 與 node3 都沒(méi)有配置任何的詞庫(kù),此時(shí)當(dāng)前環(huán)境無(wú)法達(dá)到我們的預(yù)期分詞效果

總結(jié)

通過(guò)上面我們的試驗(yàn),可以發(fā)現(xiàn)結(jié)合 IK分詞器,使用自定義詞庫(kù),可以滿足我們專業(yè)內(nèi)的詞語(yǔ)分詞,實(shí)現(xiàn)更好的分詞效果,再加上動(dòng)態(tài)詞庫(kù)的更新,對(duì)我們的工作還是很有必要的,配置過(guò)程是不是很簡(jiǎn)單,下面就趕緊用起來(lái)吧。

以上就是Elasticsearch外部詞庫(kù)文件更新及使用的詳細(xì)內(nèi)容,更多關(guān)于Elasticsearch外部詞庫(kù)文件更新的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • RocketMQ消息發(fā)送流程源碼剖析

    RocketMQ消息發(fā)送流程源碼剖析

    這篇文章主要為大家介紹了RocketMQ消息發(fā)送流程源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Java Lock鎖多線程中實(shí)現(xiàn)流水線任務(wù)

    Java Lock鎖多線程中實(shí)現(xiàn)流水線任務(wù)

    這篇文章主要介紹了Java Lock鎖多線程中實(shí)現(xiàn)流水線任務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java中的魔法值解決

    Java中的魔法值解決

    這篇文章主要介紹了Java中的魔法值解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java實(shí)現(xiàn)把圖片處理到指定大小的操作方法

    Java實(shí)現(xiàn)把圖片處理到指定大小的操作方法

    項(xiàng)目開(kāi)發(fā)中,經(jīng)常遇到圖片上傳功能,發(fā)現(xiàn)如果圖片比較大時(shí),在查看、預(yù)覽、下載速度會(huì)特別慢,考慮到浪費(fèi)流量以及文件服務(wù)器的存儲(chǔ)空間,決定在后端優(yōu)化處理完再上傳,所以本文給大家介紹了使用Java把圖片處理到指定大小的操作方法,需要的朋友可以參考下
    2025-03-03
  • Java Synchronized字節(jié)碼層分析體驗(yàn)

    Java Synchronized字節(jié)碼層分析體驗(yàn)

    這篇文章主要介紹了Java Synchronized字節(jié)碼層分析,synchronized關(guān)鍵字解決了多個(gè)線程之間的資源同步性,synchronized關(guān)鍵字保證了它修飾的方法或者代碼塊任意時(shí)刻只有一個(gè)線程在訪問(wèn)
    2023-04-04
  • Spring中的@PropertySource注解源碼詳細(xì)解析

    Spring中的@PropertySource注解源碼詳細(xì)解析

    這篇文章主要介紹了Spring中的@PropertySource注解源碼詳細(xì)解析,@PropertySource注解,標(biāo)注在配置類@Configuration上面,下面主要分析一下@PropertySource注解的處理過(guò)程,也就是怎么把配置信息從.properies文件放到environment中的,需要的朋友可以參考下
    2024-01-01
  • 詳解Java中l(wèi)ist,set,map的遍歷與增強(qiáng)for循環(huán)

    詳解Java中l(wèi)ist,set,map的遍歷與增強(qiáng)for循環(huán)

    這篇文章主要介紹了詳解Java中l(wèi)ist,set,map的遍歷與增強(qiáng)for循環(huán)的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java多線程之Semaphore實(shí)現(xiàn)信號(hào)燈

    Java多線程之Semaphore實(shí)現(xiàn)信號(hào)燈

    這篇文章主要給大家分享的是Java多線程之Semaphore實(shí)現(xiàn)信號(hào)燈的練習(xí),emaphore是計(jì)數(shù)信號(hào)量。Semaphore管理一系列許可證。每個(gè)acquire方法阻塞,直到有一個(gè)許可證可以獲得然后拿走一個(gè)許可證;下面一起進(jìn)入文章學(xué)習(xí)Semaphore的具體內(nèi)容
    2021-10-10
  • SpringBoot整合Spring Batch示例代碼

    SpringBoot整合Spring Batch示例代碼

    這篇文章主要來(lái)和大家一起探討一下SpringBoot如何整合Spring Batch,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Spring中@Lazy注解的使用示例教程

    Spring中@Lazy注解的使用示例教程

    Spring在應(yīng)用程序上下文啟動(dòng)時(shí)去創(chuàng)建所有的單例bean對(duì)象, 而@Lazy注解可以延遲加載bean對(duì)象,即在使用時(shí)才去初始化,這篇文章主要介紹了Spring中@Lazy注解的使用,需要的朋友可以參考下
    2023-06-06

最新評(píng)論

南丰县| 上栗县| 凤台县| 乌鲁木齐县| 怀仁县| 兰溪市| 定南县| 绩溪县| 安阳县| 青田县| 清水河县| 磐石市| 台南县| 光山县| 兴城市| 瓮安县| 九龙坡区| 安龙县| 微山县| 个旧市| 乡宁县| 平邑县| 施甸县| 甘肃省| 永康市| 惠安县| 万宁市| 民丰县| 包头市| 凌源市| 牙克石市| 家居| 缙云县| 安溪县| 永和县| 西和县| 沙湾县| 新宁县| 石楼县| 永仁县| 封丘县|