如何将多个solr标记连接成一个

时间:2016-01-31 03:19:44

标签: solr token postal-code shingles

在Solr中,当使用solr.ShingleFilterFactory合并标记时,它可能会生成多个Shingles,具体取决于要合并的min / maxShingleSize和标记。因此,搜索失败。如何将多个令牌合并为一个,以便我的搜索工作。以下是我的设置:

getPath()

以下是查询name_ngram的调试输出:"我们的G20 9NS"

<fieldType name="text_ngram" class="solr.TextField">
    <analyzer type="index">
        <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\b \b" replacement=""/>
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
   </analyzer>
   <analyzer type="query">
       <tokenizer class="solr.StandardTokenizerFactory"/>
       <filter class="solr.LowerCaseFilterFactory"/>
       <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"/>
       <filter class="solr.ShingleFilterFactory" tokenSeparator="" minShingleSize="2" maxShingleSize="7" outputUnigrams="false"/>
       <filter class="solr.LengthFilterFactory" min="6" max="7"/>
   </analyzer>
</fieldType>

提前完成,

2 个答案:

答案 0 :(得分:0)

我能够通过将同义词映射移动到solr config之外来解决此问题。我写了一些自定义代码来处理它。这是最终的架构:

<LinearLayout>

答案 1 :(得分:0)

我面临着同样的挑战,并且没有任何自定义代码就解决了这个问题:

<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" />
<filter class="solr.FingerprintFilterFactory" separator="_" />
<filter class="solr.PatternReplaceFilterFactory" pattern="(_)" replacement="" replace="all"/>

关键是先用_进行指纹识别,然后将_替换为空白

希望有帮助