0

データベースからデータにインデックスを付けようとしています。私はそれをうまくやっています。しかし、私には問題があります。データベース全体に1つのインデックスを使用したい。すべての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> 
4

1 に答える 1

2

uniqueKey は実際には一意ではありません。各エンティティに他のエンティティとは異なる pk が必要です。簡単な方法の 1 つは、id に何かを追加することです。たとえば、書籍の場合:

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

この方法では、ブック ID は b-1、b-2 になり、他のテーブルについても同じように異なる接頭辞を付けます

于 2012-05-11T12:06:32.973 に答える