本發(fā)明涉及網(wǎng)絡(luò)搜索技術(shù)領(lǐng)域,確切地說是一種解決apachesolr短語搜索不準(zhǔn)的方法。
背景技術(shù):
apachesolr中有一種搜索語法叫“短語搜索”既phrasequery;短語搜索的語法為在關(guān)鍵詞上加上引號,搜索原理是引號內(nèi)的關(guān)鍵詞分詞后距離為指定的slop參數(shù)大小;但是在建索引時文檔分詞的結(jié)果會比搜索時對query分詞的結(jié)果更多,故會造成索引模式與搜索模式不匹配,從而導(dǎo)致“短語搜索”不準(zhǔn)確問題。
本發(fā)明提供了一種方法,在進(jìn)入apachesolr搜索操作之前,先將短語搜索語法中的關(guān)鍵詞按照索引模式分詞,然后替換原始的的短語搜索語句,最后進(jìn)入搜索操作。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是apachesolr在短語搜索時,因索引模式與搜索模式分詞結(jié)果不一致從而導(dǎo)致搜索不準(zhǔn)確的問題。
為解決上述技術(shù)問題,本發(fā)明采用如下技術(shù)手段:
一種解決apachesolr短語搜索不準(zhǔn)的方法;其特征在于:該方法包括如下步驟:
步驟1:數(shù)據(jù)接收,qparserplugin接收客戶端通過http協(xié)議傳輸過來的搜索語句參數(shù);
步驟2:短語查找,在qparserplugin中使用正則表達(dá)式匹配搜索語句參數(shù)中的短語,得到短語集合;
步驟3:數(shù)據(jù)分詞和替換,通過步驟2得到的短語集合中的短語進(jìn)行索引模式分詞;將分好詞的短語替換原始搜索語句中的短語;
步驟4:數(shù)據(jù)轉(zhuǎn)換,通過apachesolr的語法解析器將替換過的搜索語句轉(zhuǎn)成query;
步驟5:數(shù)據(jù)處理和輸出,進(jìn)入apachesolr的搜索過程,完成后輸出數(shù)據(jù)。
作為優(yōu)選,本發(fā)明更進(jìn)一步的技術(shù)方案是:
所述的短語查找,在parse方法中首先調(diào)用getstring方法得到搜索語句,然后使用匹配“加引號語句”的正則表達(dá)式去匹配搜索語句中的“短語搜索語句”。
所述的數(shù)據(jù)分詞和替換,調(diào)用分詞器按索引模式對匹配出來的短語分詞,最后將分詞后的語句替換原始的搜索語句。
所述的數(shù)據(jù)轉(zhuǎn)換apachesolr的語法解析器,編寫antfactqparserplugin類,且繼承apachesolr的qparserplugin并重寫createparser方法,返回值為antfactqparser類型。
所述的數(shù)據(jù)轉(zhuǎn)換apachesolr的語法解析器最后轉(zhuǎn)換數(shù)據(jù)為solrconfig.xml配置文件中配置<queryparser>,class為antfactqparserplugin;這樣可以動態(tài)靈活的配置自定義的queryparser。
本發(fā)明采用插件的方式擴(kuò)展apachesolr的語法解析器,重寫其語法解析規(guī)則,解決了短語搜索不準(zhǔn)的問題。設(shè)置了可插拔式的語法解析器擴(kuò)展插件;采用索引模式對短語進(jìn)行索引模式分詞后再搜索。
一、編寫antfactqparser類,且繼承apachesolr的luceneqparser類并重寫parse方法;在parse方法中首先調(diào)用getstring方法得到搜索語句,然后使用匹配“加引號語句”的正則表達(dá)式去匹配搜索語句中的“短語搜索語句”,然后調(diào)用分詞器按索引模式對匹配出來的短語分詞,最后將分詞后的語句替換原始的搜索語句;這樣既不影響原來apachesolr的luceneqparser的功能,又可以根據(jù)需求自定義語法解析規(guī)則;
二、編寫antfactqparserplugin類,且繼承apachesolr的qparserplugin并重寫createparser方法,返回值為antfactqparser類型;最后在solrconfig.xml配置文件中配置<queryparser>,class為antfactqparserplugin;這樣可以動態(tài)靈活的配置自定義的queryparser。
附圖說明
圖1為本發(fā)明的一種解決apachesolr短語搜索不準(zhǔn)的方法流程圖。
圖2為本發(fā)明的一種解決apachesolr短語搜索不準(zhǔn)的方法結(jié)構(gòu)框圖。
具體實(shí)施方式
下面結(jié)合實(shí)施例,進(jìn)一步說明本發(fā)明。
具體實(shí)施例1:
參見圖1、圖2可知,本發(fā)明一種解決apachesolr短語搜索不準(zhǔn)的方法;其特征在于:該方法包括如下步驟:步驟1:數(shù)據(jù)接收,qparserplugin接收客戶端通過http協(xié)議傳輸過來的搜索語句參數(shù);步驟2:短語查找,在qparserplugin中使用正則表達(dá)式匹配搜索語句參數(shù)中的短語,得到短語集合;在parse方法中首先調(diào)用getstring方法得到搜索語句,然后使用匹配“加引號語句”的正則表達(dá)式去匹配搜索語句中的“短語搜索語句”,步驟3:數(shù)據(jù)分詞和替換,通過步驟2得到的短語集合中的短語進(jìn)行索引模式分詞;將分好詞的短語替換原始搜索語句中的短語;調(diào)用分詞器按索引模式對匹配出來的短語分詞,最后將分詞后的語句替換原始的搜索語句,步驟4:數(shù)據(jù)轉(zhuǎn)換,通過apachesolr的語法解析器將替換過的搜索語句轉(zhuǎn)成query;數(shù)據(jù)轉(zhuǎn)換apachesolr的語法解析器,編寫antfactqparserplugin類,且繼承apachesolr的qparserplugin并重寫createparser方法,返回值為antfactqparser類型,數(shù)據(jù)轉(zhuǎn)換apachesolr的語法解析器最后轉(zhuǎn)換數(shù)據(jù)為solrconfig.xml配置文件中配置<queryparser>,class為antfactqparserplugin;這樣可以動態(tài)靈活的配置自定義的queryparser,步驟5:數(shù)據(jù)處理和輸出,進(jìn)入apachesolr的搜索過程,完成后輸出數(shù)據(jù)。
具體實(shí)施例2:
1、第一步,qparserplugin接收客戶端通過http協(xié)議傳輸過來的搜索語句參數(shù);
2、第二步,在qparserplugin中使用正則表達(dá)式匹配搜索語句參數(shù)中的短語,得到短語集合;
3、第三步,遍歷短語集合中的短語進(jìn)行索引模式分詞;
4、第四步,將分好詞的短語替換原始搜索語句中的短語;
5、第五步,apachesolr的語法解析器將替換過的搜索語句轉(zhuǎn)成query。
6、第六步,進(jìn)入apachesolr的搜索過程;
由于以上所述僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)不限于此,任何本技術(shù)領(lǐng)域的技術(shù)人員所能想到本技術(shù)方案技術(shù)特征的等同的變化或替代,都涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。