0

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

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

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

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

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

我在这里遵循正确的方法吗?

我在想的例子;

数据配置.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>  

架构.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" /> 

ID

4

1 回答 1

0

如果您想一起搜索它们,我会将元数据映射到一个通用模式。可能 ProductName 和 NewItemTitle 都将进入“标题”字段。某些元数据对于每种类型都是唯一的。或者您可以索引信息两次,一次作为产品名称,一次作为标题。

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

在您的 SQL 中,您可以像这样添加列:

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

那是 MySQL 语法,它可能需要针对 SQLServer 进行调整。

于 2013-09-26T15:48:11.227 回答