2015-05-20 40 views
0

我使用的是solr 4.10.3。我試圖配置Solr的忽略破折號搜索:Solr全名搜索:我如何找到包含通配符的條目

<fieldtype name="text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <!-- sonderzeichen .,-\/ ignorieren --> 
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[\.\-\\\/,]" replacement=""/> 
    <!-- enthaelt u-umlaut -> u, lowercase und uft8 decomposed --> 
    <tokenizer class="solr.ICUTokenizerFactory"/> 
    <filter class="solr.ICUFoldingFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 

    <!-- sonderzeichen .,-\/ ignorieren --> 
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[\.\-\\\/,]" replacement=""/> 
    <!-- enthaelt u-umlaut -> u, lowercase und uft8 decomposed --> 
    <tokenizer class="solr.ICUTokenizerFactory"/> 
    <filter class="solr.ICUFoldingFilterFactory"/> 
    </analyzer> 
</fieldtype> 

我有一個進入「盼盼,彼得」,這是發現,如果我搜索

(彼得PA *)
(彼得panpa *)

甚至

(PE-TE-R panpa *)

(彼得PA-N-PA-N)

(無*)匹配。

(小飛俠-P *)
(小飛俠\ -p *)

沒有給出結果。

看起來好像破折號和*的組合是一個問題?

我想找到打字"peter pan-pan"的每一個階段"pan-pan, peter" ...

回答

0

嘗試使用下面的字段類型。

<fieldType name="text_delimeter" class="solr.TextField" positionIncrementGap="100"> 
<analyzer type="index"> 
<tokenizer class="solr.WhitespaceTokenizerFactory"/> 
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" preserveOriginal="1" catenateAll="1" splitOnCaseChange="0"/> 
<filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
<analyzer type="query"> 
<tokenizer class="solr.WhitespaceTokenizerFactory"/> 
<filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldType> 

我試着用你的文字分析一下。我發現上述類型會適合你。我也分析過相同的工具。

+0

''解決了我的問題。謝謝 – jannis

+0

@jannis:很高興知道:) –