我似乎無法弄清楚如何找到與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