如何创建双嵌套字段,其中一个字段值可以被Solr中的另一个字段值覆盖?

时间:2013-10-21 09:17:15

标签: mysql solr solr4

我希望有人能帮助我尝试使用MySQL后端压缩Solr的某些表。

这是ERD:ERD for products

我有一个链接到内容表的产品表和一个覆盖内容的market_content表。文本内容意义上的内容。 product表通过“content.id”的外键引用内容表,“content.default_content”字段显示与“content.id”相关的内容。表market_content可以覆盖内容。如果'market_content.id'字段中有相应的ID与'content.id'中的记录匹配,那么我希望它从'market_content.content'字段获取内容,而不是使用'content.default_content'。

来自'content.default_content'或'market_content.content'的内容是“洗发水”,“带护发素的洗发水”等文字。

我无法在返回Solr的结果时尝试使结构如下所示,并确保如果market_content表中的id对应于内容表中的id,则Solr返回覆盖market_content表'market.content.content'字段中的内容。

我希望结果的结构如下:

ProductId:1 
Market: 
GB: 
Content_id_description: shampoo 
US:  
Content_id_description: shampoo 
EU: 
Content_id_description: Shampoo with conditioner



ProductId:2 
Market: 
GB: 
Content_id_description: shampoo 
US: 
Content_id_description: shampoo 
EU: 
Content_id_description: shampoo 

产品1;市场;欧洲联盟; Content_id_description(来自内容表的内容):被覆盖为“洗发水和护发素”。

无论如何都要让Solr在这个结构中输出,我将如何展平上面显示的ERD,以便在Solr上获得最佳的优化搜索?

由于

2 个答案:

答案 0 :(得分:0)

根据我的拙见,您不需要两个表格来满足内容。您可以按照以下 link简化ERD。在此,您可以拥有一个默认市场,其默认代码可用于没有市场相关描述的产品。

例如

     product 
     id                code
     ---               -----
     1                 a13d4
     2                 b453d


     market
     id                code
     ---               -----
     0                 default
     1                 EU
     2                 GB
     3                 USA


     market_product_details
     product_id        market_id              description
     ----------        ---------              -----------
     1                 0                      Shampoo
     1                 1                      Shampoo
     1                 2                      Shampoo
     1                 3                      Shampoo with Conditioner
     2                 0                      Perfume

因此,在market_id 0之上是产品的默认名称。

至于相关的查询,由于表结构被简化,您可以查询solr,如下所示:
select mp.product_id, mp.market_id, ma.code, mp.description from market_product_details mp, market ma where mp.market_id=ma.market

答案 1 :(得分:0)

最后,我决定创建一个单独的表,模仿没有关系或规范化的平面表结构,然后在每次插入规范化表后,我将触发一个事件来填充这个平面表结构化表。然后我做的是配置Solr使用这个平面表结构进行搜索