我正在使用EdgeNGramFilterFactory.I实现solr通配符搜索。我正在尝试实现前后search.For示例搜索“格式系统”和“系统格式”以返回相同的结果。我已经为前面和后面配置了EdgeNGramFilterFactory,但只有前面的“”格式系统“”搜索是有效的,而不是后面的“系统格式”.Can。你能告诉我这里有什么问题或遗漏的地方吗?
这是我的配置
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.StopFilterFactory" words="stopwords_en.txt" ignoreCase="true" />
<!-- <filter class="solr.SnowballPorterFilterFactory" language="English" /> -->
<filter class="EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" />
<filter class="EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="back" />
</analyzer>
</fieldType>发布于 2012-06-21 15:00:17
您提到的示例不太适合,因为它包含术语,并且当您搜索术语时,您不需要任何通配符。如果你想搜索一个术语部分,比如sys,让NGrams看起来是个好主意。我建议你看看你的solr分析页面,看看你的分析器链的结果。
配置了side="front"的系统,将单词EdgeNGramFilterFactory作为输入,将生成以下术语:
sy sys syst syste system这样,即使您最初索引的术语是system,您也可以搜索sys或system并获得结果。
配置了side="back"的系统,将单词EdgeNGramFilterFactory作为输入,将生成以下术语:
em tem stem ystem system通过这种方式,您可以搜索tem或search并获得结果。
如果你把它们放在同一个链中,你就会让第二个分析器对第一个分析器产生的每个项进行分析。你基本上是在用每个正面NGram做背面的NGrams,我猜这不是你想要的。
最好先弄清楚你的需求。如果您仍然希望在后台和前端生成NGrams,则应该在两个不同的字段中执行此操作,然后可以使用edismax解析器对这两个字段进行搜索。
https://stackoverflow.com/questions/11131715
复制相似问题