2012-04-23 110 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