sql >> Database >  >> RDS >> Mysql

Solr - DIH definieert en importeert veel-op-veel velden

Na het bekijken van documenten en googlen, heb ik het probleem zo goed als opgelost.

Tafels

  • boek
  • auteur
  • book_author_map (dit is de middelste tabel voor veel-op-veel-relaties)

DIH-configuratiebestand

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/test?characterEncoding=utf8&amp;zeroDateTimeBehavior=convertToNull" user="root"
        password="123456" />
    <document>
        <entity name="book" pk="id"
            query="SELECT * FROM book where status = 0 limit 200000;"
            deltaImportQuery="SELECT * FROM book where status = 0 and id='${dih.delta.id}' limit 200000;"
            deltaQuery="select id from book where status = 0 and CONVERT_TZ(`update_date`, @@session.time_zone, '+00:00')  &gt; '${dih.last_index_time}'"
        >
            <entity name="author"
                query="SELECT au.cn_name as author_cn_name FROM author AS au JOIN book_author_map AS bam ON au.id = bam.author_id WHERE bam.book_id = ${book.id} limit 10;"
            >
                <field name="authors" column="author_cn_name" />
            </entity>
        </entity>
    </document>
</dataConfig>

Velddefinitie

<field name="cn_name" type="textComplex" indexed="true" stored="true" />
<field name="en_name" type="textComplex" indexed="true" stored="true" />

<field name="status" type="int" indexed="true" stored="true" />

<field name="authors" type="textComplex" indexed="true" stored="true" multiValued="true" />

TODO's

  • parentDeltaQuery Het krijgt pk van de bovenliggende entiteit, maar wanneer het wordt genoemd, en wat is doen? Is dat nodig?
  • Doet deltaQuery en parentDeltaQuery nodig in sub-entiteit?



  1. PostgreSQL 9.2 JDBC-stuurprogramma gebruikt de tijdzone van de client?

  2. Integratie met een ander systeem

  3. SQL-UPDATE met LIKE

  4. GROUP_CONCAT meerdere velden met een ander scheidingsteken