我正試圖搜索姓氏的大名單上的部分開始匹配。所以的Wein *應該找溫伯格,Weinkamm等如何在Solr中進行部分初始匹配?
我可能會創建一個特殊的領域,schema.xml中添加
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="50" preserveOriginal="1"/>
其類型規範做到這一點。當我只將上面的行添加到索引分析器並將查詢分析器保留爲空時,我可以通過搜索special_field:Wein進行搜索並獲得預期的結果。
現在我看到solr也有一個* - 語法。 EdgeNGramFilterFactory和* -syntax之間的連接是什麼?
我是否正確地做事,還是有更好,更規律的方式?
謝謝!
感謝。我不期望很多查詢條件,所以我使用通配符語法,並對它很滿意。 – CruftyCraft 2010-08-17 11:24:27
我指的是索引術語的數量,而不是查詢術語。 Solr/Lucene對所有索引項進行線性搜索以選擇具有相同前綴的項的子集。一旦選擇了子集,查詢就會擴展爲包含這些條款。所以瓶頸是線性搜索。然後,我仍然推薦EdgeNGramFilter,除非你說你的索引中有幾個術語。 – Rodes 2010-08-17 20:50:42
我明白了。一旦達到性能極限,我可能會在這個方向上做相同的改變。謝謝。 – CruftyCraft 2010-08-18 13:10:38