首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solr WildCard EdgeNGramFilterFactory search前后搜索

Solr WildCard EdgeNGramFilterFactory search前后搜索
EN

Stack Overflow用户
提问于 2012-06-21 12:56:14
回答 1查看 2.3K关注 0票数 1

我正在使用EdgeNGramFilterFactory.I实现solr通配符搜索。我正在尝试实现前后search.For示例搜索“格式系统”和“系统格式”以返回相同的结果。我已经为前面和后面配置了EdgeNGramFilterFactory,但只有前面的“”格式系统“”搜索是有效的,而不是后面的“系统格式”.Can。你能告诉我这里有什么问题或遗漏的地方吗?

这是我的配置

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-21 15:00:17

您提到的示例不太适合,因为它包含术语,并且当您搜索术语时,您不需要任何通配符。如果你想搜索一个术语部分,比如sys,让NGrams看起来是个好主意。我建议你看看你的solr分析页面,看看你的分析器链的结果。

配置了side="front"的系统,将单词EdgeNGramFilterFactory作为输入,将生成以下术语:

代码语言:javascript
复制
sy sys syst syste system

这样,即使您最初索引的术语是system,您也可以搜索sys或system并获得结果。

配置了side="back"的系统,将单词EdgeNGramFilterFactory作为输入,将生成以下术语:

代码语言:javascript
复制
em tem stem ystem system

通过这种方式,您可以搜索tem或search并获得结果。

如果你把它们放在同一个链中,你就会让第二个分析器对第一个分析器产生的每个项进行分析。你基本上是在用每个正面NGram做背面的NGrams,我猜这不是你想要的。

最好先弄清楚你的需求。如果您仍然希望在后台和前端生成NGrams,则应该在两个不同的字段中执行此操作,然后可以使用edismax解析器对这两个字段进行搜索。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11131715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档