SOLR:具有字母范围的字段

时间:2014-06-16 08:59:19

标签: solr

我试图将一个字段作为一个范围进行搜索。 确切地说,我在该领域的元素看起来像这样:

A-C
Sch-So

搜索Banana(B在范围A-C中)可以返回第一个文档 并且搜索School Sch 在Sch-So中匹配)应该提供第二个文档。虽然Salat不应返回上述任何内容。

为了使其更复杂,一个文档中可以有多个值和范围,因此以下也是可能的。

A, E-G
C, F, U
Sch-So, Pi-Re

这意味着,当搜索以A开头的任何内容或以E,F或G开头的任何内容时,应找到第一个词。

有可能达到这个目的吗?

1 个答案:

答案 0 :(得分:1)

在索引文档之前,您必须对文档进行预处理,因为Solr无法匹配“香蕉”。到' a-c'。您应该从在索引时将令牌注入令牌流的自定义tokenizer开始。根据你的例子,这个标记器会注入一个'' b'和' c'进入术语' a-c'的标记流。

然后使用solr.EdgeNGramFilterFactory分析器为查询字词配置字段。您可以控制过滤器将创建的n-gram(例如,从side="front"minGramSize="1"maxGramSize="3"开始。这基本上会使搜索词变为“香蕉”。进入多个术语''' ba''禁止'禁止'

查询字词' school'将导致n-gram'' sc'' sch'因此,学校'匹配' sch'在索引中。

查询字词' salat'将导致n-gram',' sa' sal'因此,salat' 匹配' sch'在索引中。