2010-06-14 32 views

回答

1

您可能需要3个名为Products,ProductReviews和Articles的索引。每个索引可以有自己的模式。 Lucene和关系数据库方法的区别在于db中的一行大致为转换为Lucene中的文档。注意:每个文档都可以有自己的模式(这是与关系数据库的另一个区别)。

1

使用Lucene/Solr,每个文档不需要为每个字段设置一个值。在同一个模式中,可以为实体A设置一组字段,为实体B设置另一组字段,并根据实体填充相应的字段。

使用Solr,您也可以选择使用多核。每个核心都有自己的模式。你可以为每个实体定义一个核心。

5

我建议你创建你的索引,使你所有的实体具有或多或少相同的基本字段:title, content, url, uuid, entity_type, entity_sourcename等等。如果你的每个实体都有一组唯一的对应索引字段,你将很难构建查询同时搜索所有实体,并且您的结果视图可能会变得非常混乱。如果您需要某个特定实体的特定字段,请将其添加并根据其entity_type为此实体执行特殊逻辑。

我从经验中发现:我们正在管理一个超过10个不同实体的索引,这种方法的工作方式就像魅力一样。

P.S.其他一些简单的建议。

  1. 确保您的Lucene文档包含构建结果并将其显示给用户的所有必要数据(以便您不需要到数据库构造结果)。 Lucene查询通常比数据库查询快得多。
  2. 如果您绝对需要使用数据库构建结果集(例如应用权限),请首先使用Lucene查询来缩小结果,然后使用数据库查询来对其进行过滤。
  3. 如果您需要,不要害怕将自定义字段添加到您的某些文档中:将Lucene文档视为键值数据存储。
2

多核是小心使用的方法。有了像你这样简单的模式,这是一个更好的方式来做buru推荐。 这意味着要找到您的不同实体之间的共同领域,然后将只有一个或多个实体将使用的字段。然后,您可以添加一个字段“type”或“type_id”,这将表明您的实体是否为产品,产品评论...

这样做会使您拥有唯一索引并快速处理查询。

相关问题