索引数据库中的数据

时间:2012-05-11 11:50:28

标签: database solr indexing

我正在尝试索引数据库中的数据。我成功地做到了这一点。但我有一个问题。我想为整个数据库使用一个索引。所有db表至少有3列具有相同的名称(我想这样)。例如,我有这些表:成员,新成员,书籍,期刊和CD。所有这些都有列名为:id,model,biog。因此,在所有db表中,id(自动递增)从1开始。 当我使用filter(fq = model:journal)查询Solr时,它什么也没有返回。查询书籍会返回一部分数据(我有5行,它返回2.我使用来检索所有行)。我知道数据在Solr的“数据”文件中。我认为存在某种冲突。 如何在没有任何冲突的情况下为所有这些表创建单个索引?

data-config.xml:

<?xml version="1.0" encoding="utf-8"?>

<dataConfig>

  <dataSource type="JdbcDataSource" 
              driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://127.0.0.1:3306/rental" 
              user="root" 
              password="1a2b3c4d"/>

  <document>

    <entity name="members" pk="id" transformer="HTMLStripTransformer" query="select id, firstname, lastname, biog, model from members">
        <field column="id" name="id" /> 
        <field column="firstname" name="firstname" stripHTML="true" />
        <field column="lastname" name="lastname" stripHTML="true" />
        <field column="biog" name="biog" stripHTML="true" />
        <field column="model" name="model" stripHTML="true"  />
    </entity>

    <entity name="new_members" pk="id" transformer="HTMLStripTransformer" query="select id, firstname, lastname, biog, model from new_members">
        <field column="id" name="id" /> 
        <field column="firstname" name="firstname" stripHTML="true" />
        <field column="lastname" name="lastname" stripHTML="true" />
        <field column="biog" name="biog" stripHTML="true" />
        <field column="model" name="model" stripHTML="true" />
    </entity>


  <entity name="books" pk="id" transformer="HTMLStripTransformer" query="select id, title, description, model from books">
        <field column="id" name="id" /> 
        <field column="title" name="title" stripHTML="true" />
        <field column="description" name="biog" stripHTML="true" />
        <field column="model" name="model" stripHTML="true" />
    </entity>


  <entity name="journals" pk="id" transformer="HTMLStripTransformer" query="select id, title, description, model from journals">
        <field column="id" name="id" /> 
        <field column="title" name="title" stripHTML="true" />
        <field column="description" name="biog" stripHTML="true" />
        <field column="model" name="model" stripHTML="true" />
    </entity>


  <entity name="cds" pk="id" transformer="HTMLStripTransformer" query="select id, title, description, model from cd">
        <field column="id" name="id" /> 
        <field column="title" name="title" stripHTML="true" />
        <field column="description" name="biog" stripHTML="true" />
        <field column="model" name="model" stripHTML="true" />
    </entity>

  </document>
</dataConfig>

schema.xml(字段):

<fields>
  <field  name="id" type="string" indexed="true" stored="true" /> 
  <field  name="model" type="text_en" indexed="true" stored="true"  />
  <field  name="firstname" type="text_en" indexed="true" stored="true"/>
  <field  name="lastname" type="text_en" indexed="true" stored="true"/>
  <field  name="title" type="text_en" indexed="true" stored="true"/>
  <field  name="biog" type="text_en" indexed="true" stored="true"/>
</fields>
<uniqueKey>id</uniqueKey>
<defaultSearchField> biog </defaultSearchField> 

1 个答案:

答案 0 :(得分:2)

你的uniqueKey并不是唯一的,你需要每个实体拥有与其他实体不同的pk,一种简单的方法就是在id上添加一些内容,例如书籍:

query="select CONCAT('b-',id) as id,..."

这种方式,书籍ID将是b-1,b-2,对于具有不同前缀的其他表格也是如此