Solr,多个索引

时间:2013-09-26 11:22:29

标签: sql solr lucene

我想将2个不同的实体(在本例中为SQL中的2个表)索引到我的Lucene索引中。一个表包含产品,另一个表包含新闻项目。

为了能够使用相同的搜索方法(查询)来搜索产品和新闻项目,我知道它们必须在同一个索引中,因此Solr的几个核心设置不起作用 - 对吗?

在data-config.xml中,我已经定义了2个具有相应实体的文档类型。

在schema.xml中,我也为产品和新闻项定义了字段。 在我的数据库设计(表格)中,我的产品表的唯一键称为“ProductID”,其中我的新闻项的唯一键称为“Id”(这是由我正在使用的CMS制作的)。

在data-config.xml中,我应该将我的唯一ID映射到相同的“名称”。是否可以完成这项工作?

我是否遵循了正确的方法?

我正在思考的例子;

数据-config.xml中

<!-- Products --> 
 <document name="products">  
    <entity name="product" dataSource="sqlServer" pk="ProductID" query="SELECT 
        ProductID,
        ProductNumber,
        ProductName,
        FROM EcomProducts">
        <field column="ProductID" name="**Id**"/> 
        <field column="ProductNumber" name="ProductNumber"/> 
        <field column="ProductName" name="ProductName"/> 
    </entity>  
  </document>

<!-- News items ---> 
  <document name="newsitems">  
    <entity name="newsitems" dataSource="sqlServer" pk="id" query="SELECT 
        Id,
        NewsItemTitle,
        NewsItemContent,
        FROM ItemType_NewsItems">
        <field column="Id" name="**Id**"/> 
        <field column="NewsItemTitle" name="NewsItemTitle"/> 
        <field column="NewsItemContent" name="NewsItemContent"/> 
    </entity>  
  </document>  

schema.xml中

 <!-- Products --->
 <field name="**Id**" type="text_general" indexed="true" stored="true" required="true" />  
 <field name="ProductNumber" type="text_general" indexed="true" stored="true" required="false" /> 
 <field name="ProductName" type="text_general" indexed="true" stored="true" required="false" multiValued="false"/>

 <!-- Tips og fif --->      
 <field name="**Id**" type="text_general" indexed="true" stored="true" required="true" />   
 <field name="NewsItemTitle" type="text_general" indexed="true" stored="true" required="false" />  
 <field name="NewsItemContent" type="text_general" indexed="true" stored="true" required="false" /> 

编号

1 个答案:

答案 0 :(得分:0)

如果要一起搜索它们,我会将元数据映射到公共模式。也许ProductName和NewItemTitle都会进入“标题”字段。某些元数据对每种类型都是唯一的。或者您可以将信息索引两次,一次作为ProductName,一次作为标题。

除非您可以确定ID始终在两个来源中始终是唯一的,否则您可能需要为它们添加前缀。拥有一个标记每个文档类型的字段也非常方便。这样只允许搜索一种类型,在DIH中,您可以使用它只删除一种类型。

在SQL中,您可以添加如下列:

concat('product-',cast(ProductId as char)) as id,
'product' as type,

这是MySQL语法,可能需要调整SQLServer。