在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>
提前完成,
答案 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"/>
关键是先用_进行指纹识别,然后将_替换为空白
希望有帮助