Solr全名搜索:如何查找包含带通配符的短划线的条目

时间:2015-05-20 12:13:26

标签: solr

我使用solr 4.10.3。我试图将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>

我有一个条目&#34; pan-pan,peter&#34;,如果我搜索就找到了

  

(peter pa *)
  (peter panpa *)

甚至

  

(pe-te-r panpa *)

  

(peter pa-n-pa-n)

(没有*)匹配。

但是

  

(peter pan-p *)
  (peter pan \ -p *)

没有结果。

似乎短划线和*的组合是一个问题?

我希望在键入"pan-pan, peter"的每个阶段找到"peter pan-pan" ...

1 个答案:

答案 0 :(得分: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>

我尝试了你的文字并进行了相同的分析。我发现上面的类型对你有用。我也在工具中分析了相同的内容。