我似乎无法弄清楚如何使用 SOLR 查找子字符串匹配项,我已经根据前缀找出匹配项,因此我可以让 ham 匹配汉堡包。
我将如何搜索“burger”以匹配汉堡包?我试过汉堡,但这抛出了一个错误“*”或“?” 不允许作为 WildcardQuery 中的第一个字符。
如何使用 SOLR 匹配子字符串?
如果有人在搜索“apachesolr 子字符串”后来到这里,有一个更简单的解决方案:https ://drupal.stackexchange.com/a/27956/10419 (来自https://drupal.stackexchange.com/questions/26024 /how-can-i-make-search-with-a-substring-of-a-word )
将 ngramfilter 添加到 solr config 目录中 schema.xml 中的文本类型定义。
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="25" />
您可以启用此功能,但它会占用大量资源(例如搜索 SuffixQuery)。
见: http: //lucene.472066.n3.nabble.com/Leading-Wildcard-Search-td522362.html
引用邮件列表: 解决方法?想象一下,创建第二个索引(或添加另一个字段),所有术语都向后拼写。
=>
请参阅添加 ReverseStringFilter https://issues.apache.org/jira/browse/LUCENE-1398
并支持有效的领先通配符搜索:https ://issues.apache.org/jira/browse/SOLR-1321
目前,issues.apache.org 似乎已关闭。尝试使用例如谷歌缓存。
如链接中所述,您可以将前导通配符与 edismax (ExtendedDismaxQParser) 一起使用。试试看它是否足够快。
有关上述反向字符串的更多信息也可以在这里找到:solr.ReversedWildcardFilterFactory