首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SOLR 3.5与EdgeNGramFilter的子字符串匹配

SOLR 3.5与EdgeNGramFilter的子字符串匹配
EN

Stack Overflow用户
提问于 2013-07-08 16:05:20
回答 1查看 385关注 0票数 0

下面是我用于自动完成的新字段类型:

代码语言:javascript
复制
<fieldType name="autocomplete_edge" class="solr.TextField">
   <analyzer type="index">
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" maxGramSize="30" minGramSize="2"/>
   </analyzer>
   <analyzer type="query">
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
   </analyzer>
</fieldType>

字段定义如下:

代码语言:javascript
复制
<field name="title" type="autocomplete_edge" indexed="true" stored="true" required="true"/>

我的问题是,假设索引的字段文本是:

“指环王”

我的目标是让SOLR能够返回包含以下所有查询的文档:

query-1: title:"th“query-2: title:"the of”query-3: title:“of”query-4: title:"the rin“

等。

在分析标记化和EdgeNGram过滤后得到的索引时,我看到索引项如下:

"th“”的“"lo”“或”"lor“"th”“的”"ri“"ring”“ring”“

因此,查询“matches of”匹配,但查询"the ring“不匹配。

我知道,对于索引(性能和磁盘空间),保留所有可能的边缘ngram组合是昂贵的,但是对于应用程序,我们必须这样做。

欢迎任何可能的解决方案。

提前感谢并致以最良好的问候。

EN

回答 1

Stack Overflow用户

发布于 2013-07-08 16:55:33

查询the rings应匹配。

EdgeNGramFilterFactory将生成边缘图,但是生成的边缘图具有相同的位置。

因此,如果你检查由edge生成的标记,那么gram将具有相同的位置。

th,-> 1

lo,lor,->领主2

th,-> 3

ri、ring、ring、ring -> 4

因此,查询lord ofthe rings应该与搜索字段匹配,因为它们是相邻的。

如果查询在同一字段上搜索,请使用debug进行检查。

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

https://stackoverflow.com/questions/17521699

复制
相关文章

相似问题

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