2012-12-03 69 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>