2012-04-23 144 views
1

我正在使用SOLR和MySQL。SOLR - MYSQL - 查詢結果

這是我的數據-config.xml中

<dataConfig> 
    <dataSource type="JdbcDataSource" 
       driver="com.mysql.jdbc.Driver" 
       url="jdbc:mysql://localhost/meishidb" 
       user="root" 
       password="root"/> 
    <document> 
    <entity name="id" 
      query="SELECT 
         p.id, 
         p.occ_name 
        FROM 
         BCARDS_OCCUPATION AS p"> 
      <field column="id" name='id'/> 
      <field column="occ_name" name='occ_name'/> 
    </entity> 
    </document> 
</dataConfig> 

這些都是行加入到SCHEMA.XML

<field name="id" type="int" indexed="true" stored="true" required="true"/> 
<field name="occ_name" type="text" indexed="true" stored="true" required="true"/> 

查詢效果很好,SOLR增加了 'N' 文件到索引。 問題在於查詢索引;只有當我鍵入'*:*'並且僅關於文檔ID(而不是occ_name)時,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> 
</doc> 
<doc> 
<str name="id">2</str> 
</doc> 
<doc> 
<str name="id">3</str> 
</doc> 
<doc> 
<str name="id">4</str> 
</doc> 
<doc> 
<str name="id">5</str> 
</doc> 
</result> 
</response> 

如果我搜索:

id:1給我的id DOC = 1

occ_name:1給我 '未定義場occ_name'

爲什麼呢?

回答

0

我不知道你是否在你的模式中創建fieldType text,但有沒有這樣的默認模式中的字段類型。

嘗試在occ_name字段定義使用type="text_en"

而且BTW(我總是建議同樣的事情),檢查什麼是真正的內部索引用不完的最大Lucene的工具,叫做Luke

+0

謝謝關於盧克的建議。順便說一句使用「text_en」沒有工作,使用盧克我可以證實,沒有對指數 – 2012-04-24 10:38:54

+0

沒有「occ_name」看看你的schema.xml並檢查您所定義什麼樣的場的類型(字段類型)。然後相應地聲明你的occ_name字段。所以做這個改變,重新啓動Solr並重新索引。 – 2012-04-24 11:25:49

+0

我在問題中指出了我在schema.xml中定義的字段類型。我想我已經用錯誤的方式來定義它們了......但是我看不到錯誤(我建議我在occ_name字段中用'text_en'改變'text')。 – 2012-04-24 11:44:17