【问题标题】:Indexing data from database从数据库中索引数据
【发布时间】:2012-05-20 00:23:26
【问题描述】:

我正在尝试从数据库中索引数据。我正在成功地做到这一点。但我有一个问题。我想为整个数据库使用一个索引。所有的 db 表至少有 3 个同名的列(我想要这样)。例如,我有这些表:members、new_members、books、journals 和 cds。所有这些都有名为:id、model、biog 的列。因此,在所有 db 表中,id(自动递增)从 1 开始。 当我使用过滤器 (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> 

【问题讨论】:

    标签: database solr indexing


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-10-21
      • 2010-10-15
      • 1970-01-01
      • 2016-03-22
      • 2019-11-19
      相关资源
      最近更新 更多