本發(fā)明涉及計算機,特別是一種基于mongodb數(shù)據(jù)庫的中文語句搜索方法、系統(tǒng)及介質(zhì)。
背景技術(shù):
1、mongodb數(shù)據(jù)庫是一款的開源非關(guān)系型數(shù)據(jù)庫,以其靈活性、可擴展性和高性能在眾多行業(yè)和應(yīng)用場景中獲得了廣泛的應(yīng)用,mongodb憑借其易用性、強大的數(shù)據(jù)處理能力和良好的生態(tài)系統(tǒng),已經(jīng)成為眾多企業(yè)和開發(fā)者構(gòu)建現(xiàn)代應(yīng)用的首選數(shù)據(jù)庫之一。
2、現(xiàn)有技術(shù)中,在使用mongodb數(shù)據(jù)庫時,主要存在以下技術(shù)問題:
3、(1)使用mongodb數(shù)據(jù)庫進行模糊搜索時會發(fā)現(xiàn)其存在明顯的性能問題,在數(shù)據(jù)量比較大的情況下響應(yīng)時間可能達到十幾秒甚至幾分鐘。
4、(2)mongodb數(shù)據(jù)庫本身提供了用于實現(xiàn)類似關(guān)鍵詞檢索的功能的全文索引,但是mongodb數(shù)據(jù)庫的全文索引只對英文文本搜索有效,mongodb數(shù)據(jù)庫并不支持中文。
5、(3)現(xiàn)有技術(shù)中,針對mongodb數(shù)據(jù)庫,也有一些通過數(shù)據(jù)庫集成第三方插件的中文分詞器嘗試支持中文分詞,但是固定單一的中文分詞器對不同業(yè)務(wù)領(lǐng)域,如專業(yè)名詞、人名、地名等達不到預(yù)期的分詞效果,最終也無法滿足不同業(yè)務(wù)領(lǐng)域關(guān)鍵詞準(zhǔn)確搜索的效果。
6、(4)在搜索方面雖然可以再引入其它擅長搜索的中間件,但這樣無疑增加了系統(tǒng)的復(fù)雜度和運維成本。
7、針對上述技術(shù)問題,現(xiàn)有技術(shù)中常見的解決方案主要有:
8、(1)創(chuàng)建索引和查詢優(yōu)化:
9、在mongodb數(shù)據(jù)庫中數(shù)據(jù)量較大的情況下,為了提高查詢效率通常使用創(chuàng)建索引和優(yōu)化查詢語句的方法,針對要查詢的內(nèi)容字段可以創(chuàng)建單字段索引和復(fù)合索引等,通過索引查詢可以避免全表掃描,明顯提高查詢效率。創(chuàng)建索引后再對查詢語句進行優(yōu)化,常見的如:確保查詢條件能匹配到現(xiàn)有的索引,特別是復(fù)合索引時,索引字段的順序和查詢條件中的字段順序要一致。盡量讓查詢能夠完全通過索引來完成,即查詢的所有字段都在索引中包含,無需訪問文檔本身,即所謂的“索引覆蓋查詢”,避免額外的查詢開銷。避免使用索引不友好的操作:如在查詢中使用正則表達式、數(shù)組字段的非精確匹配、或在索引字段上進行計算等,這些都可能導(dǎo)致索引不能有效利用。
10、該方案的不足:該方案中說創(chuàng)建的普通索引(單字段索引、復(fù)合索引)對于精確匹配查詢有效,但是對于使用模糊查詢情況并不會走索引查詢,大數(shù)據(jù)量情況下查詢效率依然很低。mongodb數(shù)據(jù)庫支持創(chuàng)建全文索引查詢,但是不支持中文分詞,無法對中文語句進行分詞后的關(guān)鍵詞查詢。
11、(2)使用其它搜索中間件。
12、對于大數(shù)據(jù)量情況下的模糊查詢需求,通??梢钥紤]引入使用擅長文本搜索引擎中間件(如elasticsearch、apache?lucene等),搜索引擎儲存數(shù)據(jù)時對搜索文本分詞后創(chuàng)建倒排索引,能夠滿足較好的關(guān)鍵詞搜索效率。
13、該方案的不足:在使用mongodb數(shù)據(jù)庫作為存儲數(shù)據(jù)庫的情況下引入其他搜索引擎中間件,需要同時考慮mongodb和搜索中間件的數(shù)據(jù)同步問題,軟件系統(tǒng)增加對新引入中間件的適配,增加部署中間件的服務(wù)器和運維成本,增加了系統(tǒng)的復(fù)雜度和運維成本。
技術(shù)實現(xiàn)思路
1、本發(fā)明提出了一種基于mongodb數(shù)據(jù)庫的中文語句搜索方法、系統(tǒng)及介質(zhì),以解決mongodb數(shù)據(jù)庫通過數(shù)據(jù)庫集成第三方插件的中文分詞器,針對不同業(yè)務(wù)領(lǐng)域達不到預(yù)期的分詞效果,無法滿足不同業(yè)務(wù)領(lǐng)域關(guān)鍵詞準(zhǔn)確搜索的效果的技術(shù)問題。
2、本發(fā)明的一個方面在于提供一種基于mongodb數(shù)據(jù)庫的中文語句搜索方法,所述中文語句搜索方法,包括如下方法步驟:
3、s1、在mongodb數(shù)據(jù)庫中配置多張數(shù)據(jù)庫表;其中,每一張數(shù)據(jù)庫表包括一個文本字段符,不同數(shù)據(jù)庫表的文本字段符下,存儲相同的中文文本;
4、s2、對mongodb數(shù)據(jù)庫中每一張數(shù)據(jù)庫表配置一個中文分詞器,不同數(shù)據(jù)庫表配置的中文分詞器不同;
5、s3、將不同數(shù)據(jù)庫表文本字段符下存儲的相同的中文文本,使用對應(yīng)的中文分詞器進行第一分詞處理,并將第一分詞處理后的中文文本使用空格拼接,得到對應(yīng)不同數(shù)據(jù)庫表的片段中文文本;
6、s4、對mongodb數(shù)據(jù)庫中的每一張數(shù)據(jù)庫表,創(chuàng)建一個片段文本字段符;將對應(yīng)不同數(shù)據(jù)庫表的片段中文文本,分別存儲在對應(yīng)數(shù)據(jù)庫表的片段文本字段符下;
7、s5、對每一張數(shù)據(jù)庫表的片段文本字段符創(chuàng)建全文索引;
8、s6、獲取待查詢的中文語句;
9、使用不同的數(shù)據(jù)庫表配置的不同中文分詞器,對待查詢的中文語句進行第二分詞處理,得到對應(yīng)不同數(shù)據(jù)庫表的關(guān)鍵詞;
10、s7、將對應(yīng)不同數(shù)據(jù)庫表的關(guān)鍵詞,使用全文索引,在mongodb數(shù)據(jù)庫中搜索對應(yīng)不同數(shù)據(jù)庫表的片段中文文本,完成中文語句搜索。
11、在一個優(yōu)選的實施例中,在步驟s1中,mongodb數(shù)據(jù)庫中配置事項表、政策表和服務(wù)表三張數(shù)據(jù)庫表。
12、在一個優(yōu)選的實施例中,事項表配置矩陣約束法中文分詞器、政策表配置語法分析法中文分詞器、服務(wù)表配置神經(jīng)網(wǎng)絡(luò)法中文分詞器。
13、在一個優(yōu)選的實施例中,在步驟s5中,對每一張數(shù)據(jù)庫表的片段文本字段符創(chuàng)建的全文索引,采用倒排索引。
14、本發(fā)明的另一個方面在于提供一種基于mongodb數(shù)據(jù)庫的中文語句搜索系統(tǒng),所述中文語句搜索系統(tǒng),包括:
15、庫表配置模塊,用于在mongodb數(shù)據(jù)庫中配置多張數(shù)據(jù)庫表;其中,每一張數(shù)據(jù)庫表包括一個文本字段符,不同數(shù)據(jù)庫表的文本字段符下,存儲相同的中文文本;
16、中文分詞器配置模塊,用于對mongodb數(shù)據(jù)庫中每一張數(shù)據(jù)庫表配置一個中文分詞器,不同數(shù)據(jù)庫表配置的中文分詞器不同;
17、第一分詞處理模塊,用于將不同數(shù)據(jù)庫表文本字段符下存儲的相同的中文文本,使用對應(yīng)的中文分詞器進行第一分詞處理,并將第一分詞處理后的中文文本使用空格拼接,得到對應(yīng)不同數(shù)據(jù)庫表的片段中文文本;
18、片段文本字段符創(chuàng)建模塊,用于對mongodb數(shù)據(jù)庫中的每一張數(shù)據(jù)庫表,創(chuàng)建一個片段文本字段符;將對應(yīng)不同數(shù)據(jù)庫表的片段中文文本,分別存儲在對應(yīng)數(shù)據(jù)庫表的片段文本字段符下;
19、索引創(chuàng)建模塊,用于對每一張數(shù)據(jù)庫表的片段文本字段符創(chuàng)建全文索引;
20、第二分詞處理模塊,用于獲取待查詢的中文語句;使用不同的數(shù)據(jù)庫表配置的不同中文分詞器,對待查詢的中文語句進行第二分詞處理,得到對應(yīng)不同數(shù)據(jù)庫表的關(guān)鍵詞;
21、搜索模塊,用于將對應(yīng)不同數(shù)據(jù)庫表的關(guān)鍵詞,使用全文索引,在mongodb數(shù)據(jù)庫中搜索對應(yīng)不同數(shù)據(jù)庫表的片段中文文本,完成中文語句搜索。
22、在一個優(yōu)選的實施例中,庫表配置模塊中,mongodb數(shù)據(jù)庫中配置事項表、政策表和服務(wù)表三張數(shù)據(jù)庫表。
23、在一個優(yōu)選的實施例中,事項表配置矩陣約束法中文分詞器、政策表配置語法分析法中文分詞器、服務(wù)表配置神經(jīng)網(wǎng)絡(luò)法中文分詞器。
24、在一個優(yōu)選的實施例中,索引創(chuàng)建模塊,對每一張數(shù)據(jù)庫表的片段文本字段符創(chuàng)建的全文索引,采用倒排索引。
25、本發(fā)明的又一個方面在于提供一種計算機存儲介質(zhì),所述計算機存儲介質(zhì)用于存儲計算機執(zhí)行指令,所述計算機執(zhí)行指令,用于執(zhí)行本發(fā)明提供的一種基于mongodb數(shù)據(jù)庫的中文語句搜索方法。
26、與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果:
27、本發(fā)明提出的一種基于mongodb數(shù)據(jù)庫的中文語句搜索方法、系統(tǒng)及介質(zhì),在mongodb數(shù)據(jù)庫中配置多張數(shù)據(jù)庫表,中文文本存儲到mongodb數(shù)據(jù)庫時,將相同的中文文本存儲在多張數(shù)據(jù)庫表中。通過對不同數(shù)據(jù)庫表配置不同的中文分詞器,對不同數(shù)據(jù)庫表存儲的相同的中文文本進行第一分詞處理,實現(xiàn)mongodb數(shù)據(jù)庫支持中文分詞,并使多張數(shù)據(jù)庫表存儲的相同的中文文本按照不同的業(yè)務(wù)領(lǐng)域進行分詞,從而使中文文本達到不同業(yè)務(wù)領(lǐng)域預(yù)期的分詞效果,滿足不同業(yè)務(wù)領(lǐng)域關(guān)鍵詞準(zhǔn)確搜索的效果。
28、本發(fā)明提出的一種基于mongodb數(shù)據(jù)庫的中文語句搜索方法、系統(tǒng)及介質(zhì),對mongodb數(shù)據(jù)庫中的每一張數(shù)據(jù)庫表,創(chuàng)建一個片段文本字段符。將中文文本按照不同的業(yè)務(wù)領(lǐng)域進行分詞后,對應(yīng)不同數(shù)據(jù)庫表的片段中文文本,分別存儲在對應(yīng)數(shù)據(jù)庫表的片段文本字段符下,對每一張數(shù)據(jù)庫表的片段文本字段符創(chuàng)建全文索引,無需部署中間件的服務(wù)器和運維成本,降低系統(tǒng)的復(fù)雜度和運維成本。
29、本發(fā)明提出的一種基于mongodb數(shù)據(jù)庫的中文語句搜索方法、系統(tǒng)及介質(zhì),對待查詢的中文語句,使用不同的數(shù)據(jù)庫表配置的不同中文分詞器,進行第二分詞處理,得到對應(yīng)不同數(shù)據(jù)庫表的關(guān)鍵詞,使用全文索引,在mongodb數(shù)據(jù)庫中搜索對應(yīng)不同數(shù)據(jù)庫表的片段中文文本,達到不同業(yè)務(wù)領(lǐng)域關(guān)鍵詞準(zhǔn)確搜索的效果。
30、本發(fā)明提出的一種基于mongodb數(shù)據(jù)庫的中文語句搜索方法、系統(tǒng)及介質(zhì),在大數(shù)據(jù)量情況下明顯提升搜索效率,搜索效果類似于模糊搜索,底層依賴mongodb創(chuàng)建的倒排索引,能夠通過關(guān)鍵詞快速檢索到相關(guān)數(shù)據(jù)。無需引入其他文本搜索引擎中間或者數(shù)據(jù)庫插件,只基于mongodb數(shù)據(jù)庫就能實現(xiàn)較好的搜索效果,不需要考慮數(shù)據(jù)庫和中間件之間的數(shù)據(jù)同步問題,不需要額外增加服務(wù)器硬件和運維成本。
31、本發(fā)明提出的一種基于mongodb數(shù)據(jù)庫的中文語句搜索方法、系統(tǒng)及介質(zhì),可自定義中文分詞算法,適配不同業(yè)務(wù)領(lǐng)域中專業(yè)詞語的分詞檢索,同時可以自定義過濾一些影響搜索效率的助詞、連詞等,還可以自定義過濾敏感詞,垃圾詞等避免被搜索到。
32、本發(fā)明提出的一種基于mongodb數(shù)據(jù)庫的中文語句搜索方法、系統(tǒng)及介質(zhì),在千萬級別數(shù)據(jù)量下搜索關(guān)鍵詞響應(yīng)在1秒以內(nèi),相比于模糊搜索有明顯的性能提示,并且本發(fā)明可以針對不同的數(shù)據(jù)庫表的業(yè)務(wù)數(shù)據(jù)靈活配置不同的分詞算法,從而滿足不同行業(yè)領(lǐng)域?qū)I(yè)詞句依然有較好的搜索效果。