Create index on two unrelated table in Solr

独自空忆成欢 提交于 2019-12-13 03:42:21

问题


I want to create index between two tables, stock and auction. Basically I am working on a product site. So I have to create index on both tables. and they are not related at all.

In data-config.xml, that I created to create index, I wrote the following code

<dataConfig>
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/database" user="root" password=""/>
    <document name="content">
        <entity name="stock" query="select ST_StockID,ST_StockCode,ST_Name,ST_ItemDetail from stock where estatus = 'Active' limit 100">
            <field column="ST_StockID" name="stock_ST_StockID" />
            <field column="ST_StockCode" name="stock_ST_StockCode" />
            <field column="ST_Name" name="stock_ST_Name" />
            <field column="ST_ItemDetail" name="stock_ST_ItemDetail" />
        <entity name="auction" query="select iauctionid,rad_number,vsku,auction_code from auction limit 100">
            <field column="iauctionid" name="auction_iauctionid" />
            <field column="rad_number" name="auction_rad_number" />
            <field column="vsku" name="auction_vsku" />
            <field column="auction_code" name="auction_auction_code" />
        </entity>
        </entity>

    </document>
</dataConfig>

and the schema.xml contains the fields are given below.

 <field name="stock_ST_StockID" type="string" indexed="true" stored="true" required="true"/>
    <field name="stock_ST_StockCode" type="string" indexed="true" stored="true" required="true"/>
    <field name="stock_ST_Name" type="string" indexed="true" stored="true" required="true"/>
    <field name="stock_ST_ItemDetail" type="text" indexed="true" stored="true" required="true"/>

    <field name="auction_iauctionid" type="string" indexed="true" stored="true" required="true"/>
    <field name="auction_rad_number" type="string" indexed="true" stored="true" required="true"/>
    <field name="auction_vsku" type="string" indexed="true" stored="true" required="true"/>
    <field name="auction_auction_code" type="text" indexed="true" stored="true" required="true"/>

But this way the indexes are being created in wrong way as I put the other table data into the first table in data-config.xml. If I create two entity element like given below then the indexes are not being created.

<dataConfig>
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/lc" user="root" password=""/>
    <document name="content">
        <entity name="stock" query="select ST_StockID,ST_StockCode,ST_Name,ST_ItemDetail from stock where estatus = 'Active' limit 100">
            <field column="ST_StockID" name="stock_ST_StockID" />
            <field column="ST_StockCode" name="stock_ST_StockCode" />
            <field column="ST_Name" name="stock_ST_Name" />
            <field column="ST_ItemDetail" name="stock_ST_ItemDetail" />

        </entity>
        <entity name="auction" query="select iauctionid,rad_number,vsku,auction_code from auction limit 100">
            <field column="iauctionid" name="auction_iauctionid" />
            <field column="rad_number" name="auction_rad_number" />
            <field column="vsku" name="auction_vsku" />
            <field column="auction_code" name="auction_auction_code" />
        </entity>
    </document>
  </dataConfig>

I did not get your answer, can you pls elaborate a little more. I also have the same requirement. I have two tables stock and auction. Basically I am working on a product site. So I have to create index on both tables. and they are not related at all.

Please help


回答1:


Do you get any errors when indexing the data ??

The following data config is fine as you have two unrelated items.

<dataConfig>
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/lc" user="root" password=""/>
    <document name="content">
        <entity name="stock" query="select ST_StockID,ST_StockCode,ST_Name,ST_ItemDetail from stock where estatus = 'Active' limit 100">
            <field column="ST_StockID" name="stock_ST_StockID" />
            <field column="ST_StockCode" name="stock_ST_StockCode" />
            <field column="ST_Name" name="stock_ST_Name" />
            <field column="ST_ItemDetail" name="stock_ST_ItemDetail" />

        </entity>
        <entity name="auction" query="select iauctionid,rad_number,vsku,auction_code from auction limit 100">
            <field column="iauctionid" name="auction_iauctionid" />
            <field column="rad_number" name="auction_rad_number" />
            <field column="vsku" name="auction_vsku" />
            <field column="auction_code" name="auction_auction_code" />
        </entity>
    </document>
</dataConfig>

However, there are few things missing ?

  • Whats the id field for the entity ? As each document should have a unique id, the configuration seems missing above.
  • Also the id should be unqiue for the entites, else the stock and auction should overwrite each other.
  • So you may want the id append as stock_ & auction_
  • You can also add a static field as Stock and auction to your schema and populate them, which would help you the filter out the results when searching and hence improve the performance.

For Assigning the Ids -

You can use the following to create the id value - This should append the Stock_ with the ST_StockID field value.

<field column="id" template="Stock_#${stock.ST_StockID}" />

OR

Use alias in sql e.g. SELECT 'Stock_' || ST_StockID AS ID ..... as use -

<field column="id" name="id" />


来源:https://stackoverflow.com/questions/8147964/create-index-on-two-unrelated-table-in-solr

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!