2012-10-25 46 views
0

我有一個基本的SOLR實例SOLR返回空的查詢,但沒有一個真正的查詢文檔

<?xml version="1.0" encoding="UTF-8" ?> 
<schema name="my-solr" version="1.5"> 
    <types> 
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" indexed="true" /> 
    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" indexed="true"/> 
    </types> 

    <fields> 
    <field name="id" type="string" indexed="true" stored="true" required="true" /> 
    <field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/> 
    </fields> 

    <uniqueKey>id</uniqueKey> 
</schema> 

如果我發出從Solr管理頁面空查詢,我得到的一些結果:

<response> 
    <lst name="responseHeader"> 
    <int name="status">0</int> 
    <int name="QTime">1</int> 
    <lst name="params"> 
    <str name="indent">on</str> 
    <str name="start">0</str> 
    <str name="q">*:*</str> 
    <str name="version">2.2</str> 
    <str name="rows">10</str> 
    </lst> 
    </lst> 
    <result name="response" numFound="5" start="0"> 
     <doc><str name="id">1</str><arr name="title"><str>Test</str></arr></doc> 
     <doc><str name="id">2</str><arr name="title"><str>Other Test</str></arr></doc> 
    </result> 
</response> 

但是,如果我發出查詢title:"test"(糾正我,如果我有錯誤的語法),我什麼也沒有得到。

<response> 
    <lst name="responseHeader"> 
    <int name="status">0</int> 
    <int name="QTime">0</int> 
    <lst name="params"> 
    <str name="indent">on</str> 
    <str name="start">0</str> 
    <str name="q">title:"test"</str> 
    <str name="version">2.2</str> 
    <str name="rows">10</str> 
    </lst> 
    </lst> 
    <result name="response" numFound="0" start="0"/> 
</response> 

幫助!

回答

0

事實證明,這並不是以我預期的方式進行索引,因爲我沒有使用合適的分析器。我以示例schema.xml中的示例text_general類型爲例,它的工作原理非常類似。這足以起到作用。轉載於此。

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <!-- in this example, we will only use synonyms at query time 
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
    --> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 
0

確保在您的模式中標題字段設置爲indexed =「true」。只有索引字段可以在查詢中指定(並且只有存儲了=「true」的字段可以被請求返回)。

如果你改變模式,我會建議重新啓動solr並重新索引一切。

從我在你的輸出中看到的空查詢,你似乎也已經將title定義爲多值/數組了。這在大多數情況下沒有意義。舉例標題字段:

<field name="title" type="string" indexed="true" stored="true" required="true" multiValued="false"/>

請注意,你應該只「存儲」領域,你需要回到稍後。

+0

就我所知,每個字段都被編入索引。我在架構中犯了錯誤嗎?我刪除數據並重新開始每一項變更。我會嘗試使用單個值,但是我會希望在其他字段的某個點使用多值。 – Joe

+0

很難說如果你不在模式中發佈你的字段配置。但是,當然,如果你使用了錯誤的類型/工廠,它不會找到任何東西。 – kbeyer

+0

多值與否是每個字段的配置。爲了保持結構清潔,我建議只將它用於實際上是數組的字段。如果文檔有兩個標題,則可能是錯誤的,並且您想要收到錯誤消息。然而,多個類別是完全可能的。 索引反正你有兩種可能性: 1)把一切都變成一個場的copytext和使用標準解析器 2)把一切都變成多張田用的copytext(以及例如不同的戰略),並使用edismax分析器與重點。 .. – kbeyer