我似乎无法弄清楚如何找到与SOLR的子字符串匹配,我已经根据前缀计算出匹配,因此我可以让火腿匹配汉堡包。SOLR中的子串匹配
我该如何搜索“汉堡”以匹配汉堡包?我试过汉堡,但是这抛出了一个错误'*'或'?'不允许作为WildcardQuery中的第一个字符。
如何使用SOLR匹配子串?
我似乎无法弄清楚如何找到与SOLR的子字符串匹配,我已经根据前缀计算出匹配,因此我可以让火腿匹配汉堡包。SOLR中的子串匹配
我该如何搜索“汉堡”以匹配汉堡包?我试过汉堡,但是这抛出了一个错误'*'或'?'不允许作为WildcardQuery中的第一个字符。
如何使用SOLR匹配子串?
你可以启用它,但它会非常耗费资源(例如搜索SuffixQuery)。
请参见:http://lucene.472066.n3.nabble.com/Leading-Wildcard-Search-td522362.html
引用邮件列表: 变通?想象一下,制作第二个索引(或添加另一个字段),并将所有术语向后拼写。 https://issues.apache.org/jira/browse/SOLR-1321
目前issues.apache.org似乎下来:
=>
看到有效的领导通配符搜索添加ReverseStringFilter https://issues.apache.org/jira/browse/LUCENE-1398
和支持。尝试使用例如谷歌缓存。
如前面在link中所述,您可以使用edismax(ExtendedDismaxQParser)的领先通配符。试试看看它是否足够快。
关于上述reversedstring一些更多的信息,也可以在这里找到:solr.ReversedWildcardFilterFactory
如果有人搜索“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)
在solr config 目录中的schema.xml中添加ngramfilter文本类型定义。
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="25" />
这一直困扰着我好几个星期。感谢您发布,它试图根据子字符串过滤/搜索解决了我的问题。 – Genzume 2015-07-31 05:23:52
这对于非常大的数据集不适用。索引数据时,边缘格式字段将需要大量内存。 – alpeshpandya 2017-05-02 18:27:57
你会这么好心张贴代码,您是如何做到的前缀匹配? – Roman 2016-11-09 10:27:34