摘要:總結(jié)兩種方式都能起作用,中綴索引比較簡(jiǎn)單,但會(huì)大幅度增加索引文件的大小和索引的速度安裝正則引擎比較煩,而且要重新編譯安裝但對(duì)索引文件的大小和索引速度的影響較小。
導(dǎo)讀
Sphinx 是一個(gè)非常強(qiáng)大的全文搜索引擎,能處理各種復(fù)雜的索引請(qǐng)求.但有時(shí)候需要一些特殊的設(shè)置.
問(wèn)題比如文檔中有一種詞,該詞包含了字母和數(shù)字,比如(onepiece123) 如果一般情況下直接搜索onepiece或者123的時(shí)候,你是得不到這個(gè)文檔的.
原因sphinx在處理單詞時(shí),把整個(gè)詞看作一個(gè)整體,用關(guān)鍵詞搜索的時(shí)候也是,比如,搜索詞如果是onepiece,那么得到的文檔只能是包含了onepiece這個(gè)詞段(如onepiece 123)的才能被索引到,否則除非直接搜索onepiece123,你是得不到文檔onepiece123的.
解決方式這種時(shí)候有兩種方式可以解決:
中綴索引設(shè)置中綴索引長(zhǎng)度,中綴索引可以讓我們進(jìn)行通配符搜索文檔的操作,比如word, word*, *word
min_infix_len
中綴索引長(zhǎng)度默認(rèn)為0,即不做中綴索引,假如設(shè)置成一個(gè)合適的長(zhǎng)度,那么就能根據(jù)單詞的某一部分查找到對(duì)應(yīng)的文檔,比如把min_infix_len 設(shè)置為2, 那么文檔中包含test的詞匯就會(huì)被分成 te, es, st tes, est,test這幾種(最小長(zhǎng)度2),當(dāng)我們用關(guān)鍵字es 去搜索的時(shí)候,就能命中這個(gè)包含test的文檔,當(dāng)然,這也導(dǎo)致了我們的索引文件大小大幅度增加,索引速度降低的問(wèn)題
為了解決開(kāi)始的時(shí)候我們提到的這種單詞帶數(shù)字的查找,我們可以設(shè)置一個(gè)比較合適的中綴索引長(zhǎng)度,比如8,那么包含onepiece123這個(gè)詞的文檔會(huì)被分成onepiece, onepiece1, onepiece12, onepiece123, nepiece12,...等等(按順序包含至少8?jìng)€(gè)原有字符,不能跳過(guò)任意的字母),這樣,當(dāng)我們搜索oinepiece的時(shí)候, 因?yàn)樵械膐inepiece123文檔被分成了包含了onepiece等多個(gè)的文檔,我們就能命中這個(gè)oinepiece123所在的文檔了.
設(shè)置regexp_filter該設(shè)置允許我們通過(guò)正則的方式映射最終的文檔格式.那樣的話我們就能統(tǒng)一一些常見(jiàn)的單詞或者短語(yǔ)的格式了.
比如
"iphone 3gs" , "iphone 3 gs" (或者甚是 "iphone3 gs")
當(dāng)我們?cè)谒阉鬟@些關(guān)鍵詞的時(shí)候,我們都希望能命中包含iphone3gs這個(gè)文檔,我們可以像這樣設(shè)置索引:
regexp_filter?。健(iphone 3gs)| (iphone 3 gs) | (iphone3 gs)] => iphone3gs
這樣在創(chuàng)建索引的時(shí)候, 所有包含上面三種的iphone?。砱s的格式都能映射成iphone3gs, 在搜索iphone3gs的時(shí)候, 就能命中所有包含上面三種詞的文檔了
回歸我們的初始問(wèn)題,這種方式處理單詞+數(shù)字的索引設(shè)置可以這么設(shè)置
regexp_filter?。健?[a-z|A-Z]+)(d+) =>1 2
"1"和"2"之間有空格,"1"對(duì)應(yīng)單詞的正則匹配, "2"對(duì)應(yīng)數(shù)字的正則匹配,中間加了一個(gè)空格,這就表示在創(chuàng)建索引的時(shí)候單詞+數(shù)字的文檔會(huì)被分開(kāi).
不過(guò)要說(shuō)明的是,如果想使用這個(gè)配置,需要安裝一個(gè)名叫re2的正則引擎替代系統(tǒng)內(nèi)置的正則引擎,安裝好后重新編譯安裝sphinx的源碼,在./configure的時(shí)候帶上參數(shù)
--with-re2,然后regexp_filter才會(huì)游泳
這樣也能解決單詞+數(shù)字的搜索問(wèn)題。
總結(jié)兩種方式都能起作用,中綴索引比較簡(jiǎn)單,但會(huì)大幅度增加索引文件的大小和索引的速度.regexp_filter安裝正則引擎比較煩,而且要重新編譯安裝sphinx, 但對(duì)索引文件的大小和索引速度的影響較小。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/20948.html
摘要:本文以為例來(lái)介紹如何打造自己的搜索引擎。其官方網(wǎng)站是可以說(shuō)支持包括英文中文等所有語(yǔ)言的搜索。默認(rèn)把中文按字拆分的,但這樣就會(huì)產(chǎn)生搜索出不相干的內(nèi)容來(lái)。因此,有人就給打了中文分詞的補(bǔ)丁。 Google搜索引擎建立至今已經(jīng)快20年了,之后全球各類大大小小類似的搜索引擎也陸續(xù)出現(xiàn)、消亡。國(guó)內(nèi)目前以百度為大,搜狗、360、必應(yīng)等也勢(shì)在必爭(zhēng)。搜索引擎技術(shù)也發(fā)展的相當(dāng)成熟,同時(shí)也就出現(xiàn)了很多開(kāi)源的...
摘要:簡(jiǎn)介是開(kāi)源的搜索引擎,它支持英文的全文檢索。但是往往我們要求的是中文索引,怎么做呢國(guó)人提供了一個(gè)可供企業(yè)使用的,基于的中文全文檢索引擎。 Sphinx 簡(jiǎn)介 Sphinx是開(kāi)源的搜索引擎,它支持英文的全文檢索。所以如果單獨(dú)搭建Sphinx,你就已經(jīng)可以使用全文索引了。但是往往我們要求的是中文索引,怎么做呢?國(guó)人提供了一個(gè)可供企業(yè)使用的,基于Sphinx的中文全文檢索引擎。也就是說(shuō)Cor...
摘要:簡(jiǎn)介是開(kāi)源的搜索引擎,它支持英文的全文檢索。但是往往我們要求的是中文索引,怎么做呢國(guó)人提供了一個(gè)可供企業(yè)使用的,基于的中文全文檢索引擎。 Sphinx 簡(jiǎn)介 Sphinx是開(kāi)源的搜索引擎,它支持英文的全文檢索。所以如果單獨(dú)搭建Sphinx,你就已經(jīng)可以使用全文索引了。但是往往我們要求的是中文索引,怎么做呢?國(guó)人提供了一個(gè)可供企業(yè)使用的,基于Sphinx的中文全文檢索引擎。也就是說(shuō)Cor...
閱讀 2048·2023-04-25 15:45
閱讀 1450·2021-09-29 09:34
閱讀 2578·2021-09-03 10:30
閱讀 2081·2019-08-30 15:56
閱讀 1512·2019-08-29 15:31
閱讀 1335·2019-08-29 15:29
閱讀 3258·2019-08-29 11:24
閱讀 3119·2019-08-26 13:45