2010-06-30 77 views
5

從solr索引中剝離標點符號時出現問題 當標點符號緊跟在單詞後面時,該單詞沒有正確編入索引。Solr:索引之前的標點符號

例如:如果我們索引「hello,John」,那麼資源將不會被關鍵字「hello」找到,而如果我們在單詞「hello」後面刪除逗號,則沒有問題。

是否有假設去掉標點符號的FilterFactory?有任何想法嗎?

感謝, 波格丹。

回答

6

這是用WordDelimiterFilterFactory完成的。設置generateWordParts = 1。

還有PatternTokenizerFactory可以使用,但我從來沒有嘗試過。

+0

對於患有邊緣的情況下像我這樣的:該generateWordParts = 1將正常工作,但如果你做我在做什麼,也不會:我使用的是WDFF的'types'屬性映射。和$給ALPHA,這樣我就可以匹配像$ 10.00這樣的術語。這具有導致前綴和後綴週期被包括作爲該詞的一部分的負面影響。所以在我的情況下,@claytron的答案可能更適合。 – 2014-05-08 15:34:52

6

可以使用solr.PatternReplaceFilterFactory剝離開頭和結尾標點本:

<filter class="solr.PatternReplaceFilterFactory" 
    pattern="^\p{Punct}*(.*?)\p{Punct}*$" 
    replacement="$1"/> 

如果你想去除所有的標點開頭和結尾,除了(例如)在前面的美元符號一個字,你可以這樣做:

<filter class="solr.PatternReplaceFilterFactory" 
    pattern="^[\p{Punct}&&[^$]]*(.*?)\p{Punct}*$" 
    replacement="$1"/> 
+0

我相信梅森的編輯也從根本上改變了這個答案。他應該增加另一個答案。 – CorayThan 2014-05-08 15:48:45

+0

@CorayThan變化太激進了嗎?我稍微調整了claytron原始答案中的正則表達式,因爲捕獲標點符號以後再扔掉它是不必要的,然後添加了一個示例,說明如果希望除去特定字符的所有標點符號,則可以進一步調整該正則表達式......這可能非常有用。對於我來說,這兩者都不是完全不同的答案,所以發佈它似乎不太合適。 – 2014-05-09 00:23:08

0

使用PatternReplaceFilterFactory

<!-- remove punctuation --> 
    <filter class="solr.PatternReplaceFilterFactory" pattern="^(\p{Punct}*)(.*?)(\p{Punct}*)$" replacement="$2"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
<filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    </analyzer> 

...