2014-05-21 93 views
0

我有100個文件這樣Solr中原來的名稱提供替代名稱,而搜索

<doc> 
<field name="id">9</field> 
<field name="riskId">4</field> 
<field name="riskType">legal</field> 
<field name="riskValue">3</field> 
<field name="product">Router CTP133</field> 
<field name="facility">plant</field> 
<field name="location">Busan, korea</field> 
</doc> 

目前,如果我搜索路由器(「// XYZ:8983/Solr的/ collection1 /選擇Q =路由器「),我得到的結果,如果單詞」路由器存在於「產品」字段。但我想以其他方式查詢,如...如果我搜索RT(「//XYZ:8983/solr/collection1/select q = RT「),我應該得到同樣的結果。

請幫助我。我有這個要求辦??

回答

0

我要去猜(並且令m e知道我是否錯了),您的product字段被索引爲type="text"字段。如果是這樣的話,你可以得到方便的解決方案。您的文本字段類型(在schema.xml配置)分析應包括該線路用於索引和查詢時間分析:

<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/> 

這樣就可以建立一套應synonyms.txt文件內被識別出的已知的同義詞您的索引conf文件夾。例如,在你的synonyms.txt文件中的一行可能如下:

router => rt 

當你提供的價值「路由器CTP133」作爲產品名稱,它實際上將被索引爲「RT CTP 133」。 (請注意,我假定您配置了其他常見文本字段過濾。)當某人搜索「rt」時,它將匹配此修改後的產品名稱。如果有人搜索「路由器」,則SynonymFilterFactory將再次進入並修改搜索。而不是「路由器」,實際應用的搜索將是「rt」。所以它會匹配不管。

如果您對synonyms.txt文件和schema.xml進行了必要的更改(如果同義詞過濾功能尚未激活),您應該能夠對文檔進行重新索引以獲得所需的行爲。

+0

Thnanks,我明白了,但這個答案是需要小修正的。代替「router => rt」,寫入「rt => router」。 – user3322698

+0

如果在查詢和索引時間應用這兩個訂單,它們應該具有相同的效果。使用'rt => router',只有在查詢時才能應用過濾器,只要縮寫「rt」沒有出現在任何實際的產品記錄中。 – frances

+1

我以你說的方式再次嘗試。但它不工作。可能我在某個地方出了問題。無論如何,我滿足了我的要求。 – user3322698