2012-12-03 68 views
0

我想安裝我的SOLR從我的SQL文件中導入文檔。我發現這個應該在數據配置去:Solr DIH與SQL

<dataConfig> 
    <dataSource driver="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/wikipedia" user="wikipedia" password="secret" /> 
    <document> 
    <entity name="page" query="SELECT page_id, page_title from page"> 
     <field column="page_id" name="id" /> 
     <field column="page_title" name="name" /> 
     <entity name="revision" query="select rev_id from revision where rev_page=${page.page_id}"> 
     <entity name="pagecontent" query="select old_text from pagecontent where old_id=${revision.rev_id}"> 
      <field column="old_text" name="text" /> 
     </entity> 
     </entity> 
    </entity> 
    </document> 
</dataConfig> 

就我而言,我的模式是這樣的:

CREATE TABLE country (
    id integer NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    name varchar(255) NOT NULL 
) 
; 

CREATE TABLE location (
    id integer NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    name varchar(255) NOT NULL, 
    coordinate varchar(255) NOT NULL, 
    country_id integer NOT NULL REFERENCES country (id) 
) 
; 

CREATE TABLE item (
    id integer NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    title varchar(60) NOT NULL, 
    description varchar(900) NOT NULL, 
    date datetime NOT NULL, 
    source varchar(255) NOT NULL, 
    link varchar(255) NOT NULL, 
    location_id integer NOT NULL REFERENCES location (id) 
) 
; 

如果我想要導入以下字段到Solr的:

id 
title 
description 
date 
source 
link 
location(name) 
location(co-ordinates) 

有人可以幫我在我的方式來更改示例數據配置使用我的數據。我感到困惑的是何時使用「實體」以及何時使用「字段列」。

回答

1

您可以通過兩種方式來完成,例如: -

創建一個簡單的SQL查詢與項目和位置之間加入

<document name="items"> 
    <entity name="item" query="SELECT A.ID, A.TITLE, A.DESCRIPTION, A.DATE, A.SOURCE, B.COORDINATE , C.NAME FROM ITEM A, LOCATION B, COUNTRY C WHERE A.LOCATION_ID = B.ID AND B.COUNTRY_ID = C.ID"> 
     <field column="ID" name="id" /> 
     <field column="TITLE" name="title" /> 
     <field column="DESCRIPTION" name="description" /> 
     <field column="DATE" name="date" /> 
     <field column="SOURCE" name="source" /> 
     <field column="COORDINATE" name="coordinate" />  

    </entity> 
</document> 

使用subentities: -

<document name="items"> 
    <entity name="item" query="SELECT A.ID, A.TITLE, A.DESCRIPTION, A.DATE, A.SOURCE, B.COORDINATE , C.NAME FROM ITEM A, LOCATION B, COUNTRY C WHERE A.LOCATION_ID = B.ID AND B.COUNTRY_ID = C.ID"> 
     <field column="ID" name="id" /> 
     <field column="TITLE" name="title" /> 
     <field column="description" name="description" /> 
     <field column="DATE" name="date" /> 
     <field column="SOURCE" name="source" /> 

     <entity name="location" query="select coordinate from location where id='${item.ID}'"> 
      <field name="coordinate" column="coordinate" /> 
     </entity> 

    </entity> 
</document>