2017-04-24 117 views
0

我正在玩Apache Solr來爲網站創建搜索功能。 我的設置與默認類型text_it,這是在託管模式中定義如下文本字段:Solr短語查詢忽略停用詞

<fieldType name="text_it" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.ElisionFilterFactory" articles="lang/contractions_it.txt" ignoreCase="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_it.txt" ignoreCase="true"/> 
     <filter class="solr.ItalianLightStemFilterFactory"/> 
    </analyzer> 
    </fieldType> 

我的熟食製品的大型數據庫。每個產品都有一個產品類型和生產者的名稱。例如:

  • 產品類型:火腿帕馬,生產者名稱:A​​BC公司
  • 產品類型:布魯蒙塔爾奇諾,生產者名:釀酒X
  • 產品型:布魯蒙塔爾奇諾,生產者名:釀酒ý
  • 產品類型:Miele的蒙塔爾奇諾,生產者名稱:公司阿爾法
  • 產品類型:Lardo Colonnata,生產者名稱:公司測試
  • ...等等

注意這個詞被列爲文件stopwords_it意大利的禁用詞。文本。

給記錄上面,如果我不指定字段名稱查詢蒙達奇諾的布魯奈羅,我得到的所有與外地產品類型裏面的字記錄。不幸的是結果是一個很大的數字,其中大部分與用戶查詢完全無關。顯然這不是我想要的。

理想情況下,我想只得到2記錄與brunello迪montalcino。這也可以得到miele di montalcino

什麼solr設置將使我能夠實現這一目標?

感謝

Ç

回答

0

後您的禁用詞的正確用法設計您的模式(如你所做的)和收縮文件下面的步驟就是設計你solrconfig.xml中,特別請求處理器這將處理您的請求。 在那裏可以用默認字段配置查詢解析器和潛在的前進配置(如不同的領域涉及的人員,不同的升壓ECT ECT)[1]

後正確配置請求處理器可以運行一個短語查詢(引號是重要): 「蒙達奇諾的布魯奈羅」

如果你想一點點靈活性,您可以與您的相關性發揮,並指定一個(最小匹配)的因素,獲得的結果,例如你提到的一個(帶miele di Montalcino)

[1] https://cwiki.apache.org/confluence/display/solr/Query+Syntax+and+Parsing

+0

感謝您的回答!你認爲可以避免查詢中的雙引號?我也想處理像 - > miele brunello < - 與雙引號不匹配的查詢。 – Charlie

+0

您可以在請求處理程序中使用dismax和edismax mm參數以及短語提升。 你可以玩短語滑倒(這意味着短語匹配的術語之間的距離容差)。 看看dismax和edismax的詳細頁面! –