2012-02-23 76 views
3

我有一個使用Keyword Tokenizer(整個詞是令牌)的字段類型,帶有小寫和邊n-gram過濾器,例如, 「Robert Longo」存儲爲「r」,「ro」,...,「robert l」,「robert lo」等。這一切在分析管理頁面上似乎都按預期工作。準確的短語匹配n-gram,但沒有找到結果?

但是當我搜索「羅伯特長」(帶引號)時,即使這是一個令牌的精確匹配,我也沒有得到任何結果。當我在沒有引號的情況下搜索時,我的術語被預先標記,並且匹配所有的「羅伯特」和所有的「l」,而不僅僅是「羅伯特l」。我是否需要指定一個通配符來告訴它該術語還有更多?

從架構:

<fieldType name="edge_text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" /> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

我的目標是有東西從與被賦予什麼開始我們的存儲術語返回詞組匹配,因此精確匹配和條款的順序是至關重要的。

任何想法?

+1

它應該正常工作,我可以得到結果。你可以測試具體領域?如果字段名稱是edge_text並且已被索引,則可以嘗試q = edge_text:「robert long」 – Jayendra 2012-02-25 12:57:43

+0

謝謝,Jayendra。我的字段實際上被稱爲「suggest2」,我嘗試了以下變體:'/ solr/select /?q =「rob + l」&qf = suggest2&fl = suggest2'。也許我錯誤地提出了我的疑問? – tedders 2012-02-27 15:18:06

+0

對不起,上面的查詢來自我之後嘗試的其他內容。顯然,「rob l」不匹配。我改變了我的查詢,只是q =建議2:「羅伯特長」像你所建議的,它畢竟工作。我想嘗試使用qf而不是在查詢中指定字段是問題。再次感謝您的幫助,如果您轉貼爲答覆,我會接受。 – tedders 2012-02-27 19:01:48

回答

1

它應該工作正常,我可以得到結果。
你可以用特定的字段進行測試嗎?如果字段名稱是edge_text並被索引,則可以嘗試q=edge_text:"robert long"