0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ElasticSearch同義詞代碼解析

馬哥Linux運維 ? 來源:稀土掘金 ? 2023-11-29 10:26 ? 次閱讀

索引擎會對文檔和查詢進行分析并將其拆解為最小的單元(通常稱為詞元,實際上就是抽象的符號)。搜索時,匹配過程會使用簡單字串相似度,所以如果查詢中有一些十分微小的拼寫錯誤(例如“hous”,只比“house”少一個字母 e)或者使用名詞的復(fù)數(shù)形式(“houses”),即使文檔中包含名詞的單數(shù)形式(“house”),搜索引擎也不會匹配到這份文檔。詞干提取器或模糊查詢等工具雖然可以解決一些最常見的此類問題,但是它們并不能消除相關(guān)聯(lián)的概念或想法之間的差異,也不能將文檔或查詢中稍有不同的單詞用法視為等同。

這時同義詞就派上了大用場。同義詞的英文 synonym 來自于希臘語,分別是前綴σ?ν(syn,表示“一起”)和?νομα(ónoma,表示“名稱”)。從它的詞源可以看出,同義詞表示的是在同一語言或領(lǐng)域中具有完全或基本相同意思的不同詞語。實際上,同義詞的范圍非常廣泛,包括一般同義詞(“疲勞”和“困倦”)、縮寫(英鎊的兩種寫法“l(fā)b.”和“pound”)、電商搜索中產(chǎn)品的不同拼寫(“iPod”和“i-Pod”)、細微的語言差異(例如均表示電梯的英式英語“l(fā)ift”和美式英語“elevator”)、專業(yè)用詞和普通用詞(例如“犬”和“狗”),甚至單純表示同一概念的兩種方式(“宇宙”和“太空”)。通過提供恰當?shù)耐x詞規(guī)則,搜索工程師能夠就哪些詞在各自領(lǐng)域內(nèi)具有相似意思并應(yīng)該采取相似處理方法提供相關(guān)信息

同義詞用于提高搜索質(zhì)量并擴大匹配范圍。 例如,搜索oil的用戶可能希望找到包含原油或石油的文檔,盡管這三個詞完全不同。

在我們的很多情況下,我們希望在搜索時,有時能夠使用一個詞的同義詞來進行搜索,這樣我們能搜索出來更多相關(guān)的內(nèi)容。我們可以通過 text analysis 來幫助我們形成同義詞

索引時使用同義詞和搜索時使用同義詞的對比

同義詞在分析器中使用,其既可在索引時使用,也可在搜索時使用。關(guān)于在 Elasticsearch 中如何使用同義詞篩選器,最常見的問題之一就是:“我應(yīng)該索引時使用,還是搜索時使用,還是同時都用?” 我們首先看一下在索引時應(yīng)用同義詞篩選。這意味著會在索引后的文檔中對字詞進行一次性替換或擴展,結(jié)果將一直保存在搜索索引中。

索引時使用同義詞有幾個劣勢:

由于必須對所有同義詞進行索引,所以索引規(guī)模會變大。

搜索得分(依賴于字詞統(tǒng)計數(shù)據(jù))可能會受影響,因為同義詞也會計算在內(nèi),所以不常見單詞的統(tǒng)計數(shù)據(jù)會存在偏差。

除非進行重新索引,否則無法針對既有文檔更改同義詞規(guī)則。

最后兩條尤其是巨大劣勢。索引時應(yīng)用同義詞的唯一潛在好處是性能好,因為您在前期已費心完成了擴展過程,所以無需再在每次查詢時完成一遍擴展過程,這有可能致使需要與更多的字詞進行匹配。然而這一點在實踐中通常并非真正的問題。

相反,在搜索時所用的分析工具中使用同義詞則可以避免很多上述問題:

索引規(guī)模不受影響。

語料庫中的字詞統(tǒng)計數(shù)據(jù)保持不變。

如需變更同義詞規(guī)則,無需對文檔進行重新索引。

這些優(yōu)勢通常要高出唯一的劣勢,即每次查詢時都必須執(zhí)行同義詞擴展操作,這有可能導(dǎo)致需要匹配更多字詞。不僅如此,搜索時擴展同義詞還能夠允許使用更加復(fù)雜的synonym_graph詞元篩選器,這一工具能夠正確處理多單詞同義詞,并且僅可在搜索分析器中使用。

一般而言,搜索時使用同義詞的優(yōu)勢通常要高于索引時使用同義詞可能實現(xiàn)的微小性能改進。

然而,如果在搜索時使用同義詞,過去還需要注意另外一個問題。盡管更改同義詞規(guī)則不需要對文檔進行重新索引,但是如要更改的話,您必須暫時關(guān)閉再重新打開索引。這一點很有必要,因為分析器在下列時候才會創(chuàng)建實例:創(chuàng)建索引時,重啟節(jié)點時,以及重新打開已關(guān)閉的索引時。為了讓對同義詞規(guī)則文件所做的變更對索引可見,用戶必須首先在所有節(jié)點上更新文件,然后再關(guān)閉并重新打開索引。但是這個問題已經(jīng)得以解決。

在查詢時對詞進行同義詞解析

es操作版本8.8.0


創(chuàng)建索引
PUT myindex
{
    "settings": {
        "analysis": {
            "filter": {
                "my_synonyms": {
                    "type": "synonym_graph",
                    "synonyms": [
                        "看月亮,吃月餅=>中秋節(jié)",
                        "雙十一,雙11=>購物",
                        "免費,免費版,不要錢的,無償"
                    ]
                }
            },
            "analyzer": {
                "my_analyzer": {
                    "type": "custom",
                    "tokenizer": "standard",
                    "filter": [
                        "lowercase",
                        "my_synonyms"
                    ]
                }
            }
        }
    },
    "mappings": {
            "properties": {
                "content": {
                    "type": "text",
                    "analyzer": "standard",
                    "search_analyzer": "my_analyzer"
                }
            }
        }
    }


展示數(shù)據(jù)
"hits": {
    "total": 4,
    "max_score": 1.0,
    "hits": [
        {
            "_index": "myindex",
            "_type": "_doc",
            "_id": "luiwhIsB4MmTaMc6fVt7",
            "_score": 1.0,
            "_source": {
                "content": "無償"
            }
        },
        {
            "_index": "myindex",
            "_type": "_doc",
            "_id": "lOiwhIsB4MmTaMc6a1uu",
            "_score": 1.0,
            "_source": {
                "content": "中秋節(jié)"
            }
        },
        {
            "_index": "myindex",
            "_type": "_doc",
            "_id": "p-iwhIsB4MmTaMc68GuR",
            "_score": 1.0,
            "_source": {
                "content": "不要錢的"
            }
        },
        {
            "_index": "myindex",
            "_type": "_doc",
            "_id": "kuiwhIsB4MmTaMc6NFsw",
            "_score": 1.0,
            "_source": {
                "content": "購物"
            }
        }
    ]
}

試查詢b1be22de-8dc0-11ee-939d-92fbcf53809c.jpg

b1d40720-8dc0-11ee-939d-92fbcf53809c.jpg

b1e4aba2-8dc0-11ee-939d-92fbcf53809c.jpg

測試查詢分詞b1f763dc-8dc0-11ee-939d-92fbcf53809c.jpg

b209d47c-8dc0-11ee-939d-92fbcf53809c.jpg

b1e4aba2-8dc0-11ee-939d-92fbcf53809c.jpg

上面我們一直在創(chuàng)建索引時直接指定同義詞列表。 但是,當你有大量同義詞時,將它們?nèi)刻砑拥剿饕袝苈闊?更好的方法是將它們存儲在一個文件中,然后動態(tài)地將它們加載到索引中。 使用同義詞文件有很多好處,其中包括:

方便維護大量的同義詞。

可以被不同的索引使用。

可以在不關(guān)閉索引的情況下動態(tài)重新加載

我們將創(chuàng)建的同義詞文件稱為 synonyms.txt,但可以任意命名,把同義詞維護進去,加載到es中 默認去讀取config目錄下

b23cba54-8dc0-11ee-939d-92fbcf53809c.jpg

使用同義詞文件創(chuàng)建一個新索引,請注意我們將同義詞篩選器標記為了updateable(可更新)


PUT myindex
{
    "settings": {
        "analysis": {
            "filter": {
                "my_synonyms": {
                    "type": "synonym_graph",
                    "synonyms_path": "analysis/synonyms.txt",
                    "updateable": true
                }
            },
            "analyzer": {
                "my_analyzer": {
                    "type": "custom",
                    "tokenizer": "standard",
                    "filter": [
                        "lowercase",
                        "my_synonyms"
                    ]
                }
            }
        }
    },
    "mappings": {
        "properties": {
            "content": {
                "type": "text",
                "analyzer": "standard",
                "search_analyzer": "my_analyzer"
            }
        }
    }
}

測試同義詞


GET /myindex/_search
{
    "took": 0,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 3,
            "relation": "eq"
        },
        "max_score": 1,
        "hits": [
            {
                "_index": "myindex",
                "_id": "1",
                "_score": 1,
                "_source": {
                    "content": "齊魯"
                }
            },
            {
                "_index": "myindex",
                "_id": "2",
                "_score": 1,
                "_source": {
                    "content": "淄博"
                }
            },
            {
                "_index": "myindex",
                "_id": "3",
                "_score": 1,
                "_source": {
                    "content": "戴眼鏡"
                }
            }
        ]
    }
}


測試請求: 
GET /myindex/_search
{
    "query": {
        "match": {
            "content": "4眼仔"
        }
    }
}


響應(yīng):
{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 2.634553,
        "hits": [
            {
                "_index": "myindex",
                "_id": "3",
                "_score": 2.634553,
                "_source": {
                    "content": "戴眼鏡"
                }
            }
        ]
    }
}

審核編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 分析器
    +關(guān)注

    關(guān)注

    0

    文章

    92

    瀏覽量

    12470
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4696

    瀏覽量

    68083
  • Elasticsearch
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    2815

原文標題:ElasticSearch同義詞解析

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Windows安裝ElasticSearch

    Windows安裝ElasticSearch
    的頭像 發(fā)表于 02-15 17:09 ?934次閱讀
    Windows安裝<b class='flag-5'>ElasticSearch</b>

    linux安裝配置ElasticSearch之源碼安裝

    ElasticSearch是基于Lucene這個非常成熟的索引方案,另加上一些分布式的實現(xiàn):集群,sharding,replication等。以下是對其采用源碼安裝的方法1.下載
    發(fā)表于 01-11 17:27

    MPLAB仿真程序崩潰

    您好,首先我要說的是,我非常新的PIC編程。我已經(jīng)更改了一個源代碼(從PIC10F202),以便PIC10F322的同義詞適合于MPLAB ID.V892。我想調(diào)試現(xiàn)在的調(diào)試器& gt;選擇
    發(fā)表于 04-03 13:29

    ElasticSearch的初步環(huán)境

    ElasticSearch最實用入門指南——初步環(huán)境
    發(fā)表于 03-31 11:32

    基于同義詞典的裝備信息集成應(yīng)用研究

    本文分析了信息化條件下我軍裝備信息系統(tǒng)集成中存在的數(shù)據(jù)不同一的問題,介紹了數(shù)據(jù)同義詞典(thesaurus)的定義與設(shè)計方法,說明了數(shù)據(jù)同義詞典在裝備信息系統(tǒng)設(shè)計中的作用
    發(fā)表于 12-22 13:40 ?12次下載

    什么是跨導(dǎo)放大器(Transconductance Ampl

    什么是跨導(dǎo)放大器(Transconductance Amplifier) 將電壓轉(zhuǎn)換為電流的放大器, 另外還有其它幾個名稱(請參考同義詞列表)。其中一個同義詞是OT
    發(fā)表于 04-20 23:08 ?1.1w次閱讀
    什么是跨導(dǎo)放大器(Transconductance Ampl

    elasticsearch介紹PPT

    elasticsearch介紹PPT
    發(fā)表于 12-13 21:05 ?20次下載

    自然語言處理技術(shù)入門之基于關(guān)鍵生成文本的技術(shù)實現(xiàn)過程

    本章第一節(jié)就介紹基于關(guān)鍵生成一段文本的一些處理技術(shù)。其主要是應(yīng)用關(guān)鍵提取、同義詞識別等技術(shù)來實現(xiàn)的。下面就對實現(xiàn)過程進行說明和介紹。
    的頭像 發(fā)表于 12-26 18:12 ?1.1w次閱讀
    自然語言處理技術(shù)入門之基于關(guān)鍵<b class='flag-5'>詞</b>生成文本的技術(shù)實現(xiàn)過程

    哈工大PyLTP工具實踐:NLP任務(wù)中四大必備技術(shù)(附代碼

    相信從事NLP、數(shù)據(jù)挖掘、知識圖譜等領(lǐng)域的博友都知道哈工大LTP、同義詞林這些工具,該系列文章也會介紹相關(guān)的知識,希望對您有所幫助。
    的頭像 發(fā)表于 07-18 11:22 ?4301次閱讀

    加密貨幣謬論是怎么回事

    雖然貨幣和金錢是經(jīng)常使用的同義詞,但它們有不同的含義:貨幣是價值交換系統(tǒng)。
    發(fā)表于 10-28 08:45 ?804次閱讀

    EDA增強數(shù)據(jù)的方法

    隨機從句子中抽取n個(抽取時不包括停用詞),然后隨機找出抽取這些同義詞,用同義詞將原詞替換。
    發(fā)表于 05-25 14:55 ?833次閱讀

    ElasticSearch是什么?應(yīng)用場景是什么?

    ElasticSearch是什么 ElasticSearch的功能 ElasticSearch的應(yīng)用場景 ElasticSearch的特點
    的頭像 發(fā)表于 10-09 18:38 ?2375次閱讀

    射頻設(shè)計中“Bypass”和“Decoupling”的概念

    而且“Bypass”和“Decoupling”很多時候結(jié)構(gòu)類似,很多人也將“Bypass電容”與“Decoupling電容”用做同義詞,不過二者的使用目的和設(shè)計考慮是不同的。
    發(fā)表于 10-10 17:30 ?2584次閱讀

    淺談封裝基板和PCB的區(qū)別和關(guān)系

    PCB(printed ciruid board)是指搭載了電子元器件的PWB的整個基板為印制電路板。在多數(shù)情況下,通常將PWB與PCB按同義詞處理而不加區(qū)分。
    發(fā)表于 03-16 11:29 ?1.8w次閱讀

    Elasticsearch保姆級入門

    我們需要創(chuàng)建一個供 Elasticsearch 和 Kibana 使用的 network。這個 network 將被用于 Elasticsearch 和 Kibana 之間的通信。
    的頭像 發(fā)表于 09-01 15:24 ?773次閱讀
    <b class='flag-5'>Elasticsearch</b>保姆級入門