2017-09-15 113 views
0

我在版本6.6.0中使用Solr,版本6.6.0中使用Lucene。Apache Solr wildchard搜索不起作用

我想創建一個搜索框,顯示在查詢中鍵入命中的建議。

這裏是我的方法:

架構(我只有一個managed-schema文件):

<copyField source="someField_a" dest="someField_a_wildcard"/> 

<field name="someField_at_wildcard" type="wildcard_type" indexed="true" stored="true" /> 

<fieldType name="wildcard_type" class="solr.TextField"> 
    <analyzer type="index"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    </analyzer> 
</fieldType> 

someField_a是一個dynamic field

<dynamicField name="*_a" type="text_general" indexed="true" stored="true"/> 

當我輸入的輸入域的東西,我確實得到了結果,但不是我想要的結果:

假設someField_a是「ABC DE FG.pdf」

當我輸入「ABC」時,我得到了一個結果,但是當我走的時候,結果變得混亂起來,我沒有得到我想要的文檔。

如何正確配置?

+0

你一直沿着什麼走向錯誤? – Mysterion

+0

@Mysterion一件事,它只匹配完整的條件......它匹配STRING,但不是S或STR或任何東西。當我輸入「SO」時,我會得到以「SO」開頭的結果,但是當我繼續時,例如當我輸入「SO 102」時,我用「SO-102」結果結果,但不結合「SO 102」。 – user3629892

+0

..你究竟在哪個領域搜索? 'somefield_a'或'someField_at_wildcard'? admin下的分析頁面對索引名稱和查詢有什麼影響? – MatsLindh

回答

0

刪除whitespace標記器。我假設你正在查找文件名?在這種情況下,不需要標記。

當您將EdgeNGram篩選器與whitespace標記器結合使用時,EdgeNGram篩選器將開始爲每個標記創建ngram。

如果文件名是Windows文件,您可能需要使用solr.LowerCaseTokenizerFactory來搜索文件名不區分大小寫。

+0

那麼,我想搜索找到我輸入的每個字符somethig ...而不僅僅匹配全名 – user3629892

+0

好的,你應該查詢使用字段類型的字段。在這種情況下是'someField_at_wildcard'。我仍然認爲你不需要標記,但是如果你想有字面匹配和字符和標記的順序很重要。 – drjz

+0

好的,謝謝你的信息!我確實在錯誤的領域詢問。 – user3629892