0

我正在尝试从数据库中索引数据。我正在成功地做到这一点。但我有一个问题。我想为整个数据库使用一个索引。所有的 db 表至少有 3 个同名的列(我想要这样)。例如,我有这些表:members、new_members、books、journals 和 cds。所有这些都有名为:id、model、biog 的列。因此,在所有 db 表中,id(自动递增)从 1 开始。当我使用过滤器(fq=model:journal)查询 Solr 时,它什么也不返回。查询书籍会返回一部分数据(我有 5 行,它返回 2。我正在使用:来检索所有行)。我知道数据在 Solr 的“数据”文件中。我认为存在某种冲突。我怎样才能在没有任何冲突的情况下对所有这些表建立一个索引?

数据配置.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> 
4

1 回答 1

2

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

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

这样书的 ID 将是 b-1,b-2,对具有不同前缀的其他表执行相同操作

于 2012-05-11T12:06:32.973 回答