我正试着把一个字段作为一个范围来搜索。确切地说,我在这个领域中有这样的元素:
A-C
Sch-So
搜索Banana
(B在and范围内)Sch返回第一个文档,搜索School
(Sch匹配Sch-So)应该传递第二个文档。而Salat
不应返回上述任何一个。
为了使其更加复杂,可以在一个文档中包含多个值和范围,因此也可以使用以下内容。
A, E-G
C, F, U
Sch-So, Pi-Re
这意味着,当搜索以A开头的任何东西或以E、F或G开头的任何东西时,都应该找到第一个项。
是否有可能做到这一点?
发布于 2014-06-19 09:06:29
在对文档进行索引之前,必须对它们进行预处理,因为Solr中没有办法将“香蕉”与“a”匹配。您应该从一个自定义令牌器开始,它在索引时将令牌注入令牌流。根据您的示例,这个令牌程序将向术语“and”的令牌流中注入'a‘、'b’和'c‘。
然后,使用solr.EdgeNGramFilterFactory
分析器为查询项配置字段。您可以控制过滤器将创建哪些n克(例如,从side="front"
、minGramSize="1"
和maxGramSize="3"
开始)。这将基本上把搜索词“香蕉”变成多个词'b','ba‘和'ban’。
查询术语“school”将导致索引中的n-克“s”、“sc”、“sch”,因此“school”与“sch”匹配。
查询术语'salat‘将导致n克's’、'sa‘、'sal’等,因此'salat‘与索引中的'sch’不匹配。
https://stackoverflow.com/questions/24239942
复制