從solr索引中剝離標點符號時出現問題 當標點符號緊跟在單詞後面時,該單詞沒有正確編入索引。Solr:索引之前的標點符號
例如:如果我們索引「hello,John」,那麼資源將不會被關鍵字「hello」找到,而如果我們在單詞「hello」後面刪除逗號,則沒有問題。
是否有假設去掉標點符號的FilterFactory?有任何想法嗎?
感謝, 波格丹。
從solr索引中剝離標點符號時出現問題 當標點符號緊跟在單詞後面時,該單詞沒有正確編入索引。Solr:索引之前的標點符號
例如:如果我們索引「hello,John」,那麼資源將不會被關鍵字「hello」找到,而如果我們在單詞「hello」後面刪除逗號,則沒有問題。
是否有假設去掉標點符號的FilterFactory?有任何想法嗎?
感謝, 波格丹。
這是用WordDelimiterFilterFactory完成的。設置generateWordParts = 1。
還有PatternTokenizerFactory可以使用,但我從來沒有嘗試過。
可以使用solr.PatternReplaceFilterFactory
剝離開頭和結尾標點本:
<filter class="solr.PatternReplaceFilterFactory"
pattern="^\p{Punct}*(.*?)\p{Punct}*$"
replacement="$1"/>
如果你想去除所有的標點開頭和結尾,除了(例如)在前面的美元符號一個字,你可以這樣做:
<filter class="solr.PatternReplaceFilterFactory"
pattern="^[\p{Punct}&&[^$]]*(.*?)\p{Punct}*$"
replacement="$1"/>
我相信梅森的編輯也從根本上改變了這個答案。他應該增加另一個答案。 – CorayThan 2014-05-08 15:48:45
@CorayThan變化太激進了嗎?我稍微調整了claytron原始答案中的正則表達式,因爲捕獲標點符號以後再扔掉它是不必要的,然後添加了一個示例,說明如果希望除去特定字符的所有標點符號,則可以進一步調整該正則表達式......這可能非常有用。對於我來說,這兩者都不是完全不同的答案,所以發佈它似乎不太合適。 – 2014-05-09 00:23:08
使用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>
...
對於患有邊緣的情況下像我這樣的:該generateWordParts = 1將正常工作,但如果你做我在做什麼,也不會:我使用的是WDFF的'types'屬性映射。和$給ALPHA,這樣我就可以匹配像$ 10.00這樣的術語。這具有導致前綴和後綴週期被包括作爲該詞的一部分的負面影響。所以在我的情況下,@claytron的答案可能更適合。 – 2014-05-08 15:34:52