2012-07-12 69 views
0

我在搜索两个数据源时遇到问题。当我importAll,我看到所有的记录导入,但是当我搜索时,我在我的结果中只有dataSource的2条记录。SOLR索引和在多个数据源上搜索

在我的数据-config.xml中:

<document> 
    <entity name="one" dataSource="ds-1" query="SELECT * FROM artist"> 
    <field column="name" name="name" /> 
    </entity> 

    <entity name="two" dataSource="ds-2" query="SELECT * FROM faqdata"> 
    <field column="thema" name="thema" /> 
    </entity> 
</document> 

而且在我的schema.xml:

<fields> 
<field name="id" type="int" indexed="true" stored="true" required="true" /> 
<field name="slug" type="string" indexed="false" stored="true"/> 
<field name="name" type="text" indexed="true" stored="true" /> 
<field name="alt_name" type="text" indexed="false" stored="true"/> 
<field name="created_at" type="date" indexed="false" stored="true"/> 
<field name="updated_at" type="date" indexed="false" stored="true"/> 
<field name="thema" type="text" indexed="true" stored="true" /> 

<field name="text" type="text" indexed="true" stored="false" multiValued="true"/> 

<dynamicField name="*" type="ignored" multiValued="true" /> 
</fields> 

<uniqueKey>id</uniqueKey> 

<defaultSearchField>text</defaultSearchField> 

<solrQueryParser defaultOperator="OR"/> 

<copyField source="name" dest="text"/> 
<copyField source="thema" dest="text"/> 

是什么问题呢? 谢谢

+0

如何生成ID?他们是否覆盖第一个数据源的记录? – Jayendra 2012-07-12 09:19:14

+0

如何生成ID?我怎么知道如何生成? – user1069500 2012-07-12 09:25:18

+0

是你正在查询的表返回的ID?正如你所提到的id是一个必填字段,它正在被填充。你在结果中看到id是否返回?如果是的话,将字符串添加到该ID以使其唯一,以便它们不会互相覆盖 – Jayendra 2012-07-12 09:39:38

回答

1

Solr中的ID需要是唯一的。
如果您插入具有相同ID的实体,则以前的记录将被覆盖。
Solr不更新记录。它删除并重新插入记录。
如果你想要这两个记录,定义一个唯一的ID。
例如将艺术家和faqdata添加到ID,以便艺术家和faqdata不会相互覆盖。

SELECT A. *,'ARTIST_'||编号PRIMARY_ID来自艺术家A

SELECT A. *,'FAQDATA_'|| ID PRIMARY_ID FROM FAQDATA A

并使用PRIMARY_ID作为主ID和唯一字段。