SOLR 中的子字符串匹配

Posted

技术标签:

【中文标题】SOLR 中的子字符串匹配【英文标题】:Substring matches within SOLR 【发布时间】:2011-03-06 12:40:53 【问题描述】:

我似乎无法弄清楚如何使用 SOLR 查找子字符串匹配项,我已经根据前缀找出匹配项,因此我可以让 ham 匹配汉堡包。

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

如何使用 SOLR 匹配子字符串?

【问题讨论】:

你能把代码贴到前缀匹配的地方吗? 【参考方案1】:

您可以启用此功能,但它会占用大量资源(例如搜索 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 似乎已关闭。尝试使用例如谷歌缓存。

【讨论】:

【参考方案2】:

如之前link 中所述,您可以将前导通配符与 edismax (ExtendedDismaxQParser) 一起使用。试试看它是否足够快。

有关上述反向字符串的更多信息也可以在这里找到:solr.ReversedWildcardFilterFactory

【讨论】:

【参考方案3】:

如果有人在搜索“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 配置中 schema.xml 中的文本类型定义 目录。

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="25" />

【讨论】:

这已经困扰我好几个星期了。感谢您发布,它解决了我尝试基于子字符串进行过滤/搜索的问题。 这不适用于非常大的数据集。 Edge gram 字段在索引数据时需要大量内存。

以上是关于SOLR 中的子字符串匹配的主要内容,如果未能解决你的问题,请参考以下文章

Solr 部分和完整字符串匹配

错误太多参数试图匹配字符串bash中的子字符串[重复]

红移数据库中的子字符串匹配

根据匹配 where 条件中的子字符串来选择值

mysql中的子字符串正则表达式匹配

将大字符串中的子字符串匹配到大量关键字的最佳方法是啥