SOLR中的子串匹配

时间:2010-06-21 20:47:26

标签: search solr substring edismax

我似乎无法弄清楚如何找到与SOLR的子串匹配,我已经找到了基于前缀的匹配,所以我可以得到火腿来匹配汉堡包。

我如何搜索“汉堡包”以匹配汉堡包?我试过汉堡,但是这个错误'*'或'?'不允许作为WildcardQuery中的第一个字符。

如何使用SOLR匹配子串?

3 个答案:

答案 0 :(得分:9)

如果有人在搜索“apachesolr substring”之后到此为止,那么有一个更简单的解决方案: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" />

答案 1 :(得分:3)

你可以启用它,但它会非常耗费资源(例如搜索SuffixQuery)。

请参阅:http://lucene.472066.n3.nabble.com/Leading-Wildcard-Search-td522362.html

引用邮件列表: 解决方法?想象一下,使用向后拼写的所有术语制作第二个索引(或添加另一个字段)。

=&GT;

请参阅添加ReverseStringFilter https://issues.apache.org/jira/browse/LUCENE-1398

并支持高效的领先通配符搜索:https://issues.apache.org/jira/browse/SOLR-1321

目前,issues.apache.org似乎失败了。尝试使用例如谷歌缓存。

答案 2 :(得分:3)

如前面link中所述,您可以使用带有edismax的前导通配符(ExtendedDismaxQParser)。试试看它是否足够快。

有关上述反转字符串的更多信息,请访问:solr.ReversedWildcardFilterFactory