2013-12-11 56 views
1

我在SQL Server數據庫中存儲了120000條酒記錄。到現在爲止,我已通過執行以下SQL成功搜索了葡萄酒名稱:如何用空格實現Solr不區分大小寫和不區分變音的子字符串搜索?

WHERE (LOWER(Wine.name) LIKE '%" + (searchString) + "%'") 

我現在正在切換到使用Solr。我想搜索「clos rene」並獲得「ClosRéné」。但是,Solr將返回所有匹配'Clos'和匹配'Réné'的記錄的記錄。我曾嘗試以下字段定義:

<fieldType name="c_text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

可能有人請幫助我確定正確的字段類型,以便我可以重現我上面的SQL查詢返回與空格多個單詞不區分大小寫,不區分重音結果在?之間?

我也嘗試過使用字段類型'字符串'進行通配符搜索,但是我無法使其作爲不區分大小寫的工作。

回答

1

嘗試,

<fieldType name="c_text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="50" side="front"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
    </analyzer> 
</fieldType> 

編輯:好了現在我得到你的問題,增加了額外的:<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="50" side="front"/>試試這個。

+0

謝謝,但那並沒有解決我的問題。現在,如果我查詢: wineName:* clos * 我得到所有「clos」葡萄酒,無論大小寫或重音,但我不能搜索: wineName:* clos rene *或wineName:* clos r * 我想讓用戶搜索雙名或多名的葡萄酒。那可能嗎? – user3072631

+0

現在我明白你在前面有通配符,看看我更新的分析器部分。讓我知道。 – Arun

+0

感謝您的更新。它工作得很好。 – user3072631