【问题标题】:Indexing different type of Entities/Objects with Solr Lucene使用 Solr Lucene 索引不同类型的实体/对象
【发布时间】:2011-03-03 11:43:33
【问题描述】:

假设我想使用 Solr Lucene 索引我的商店。

我有多种类型的实体:产品、产品评论、文章

如何让我的 Lucene 索引这些类型,但每种类型都有不同的架构?

【问题讨论】:

    标签: php lucene solr search-engine


    【解决方案1】:

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

    我是根据经验说的:我们正在管理一个包含 10 多个不同实体的索引,这种方法很有效。

    附:其他一些简单的建议。

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

    【讨论】:

      【解决方案2】:

      多核是一种谨慎使用的方法。使用像您这样的简单架构,这是一种更好的方式来做 buru 建议。 这意味着要查找不同实体之间的公共字段,然后查找仅由其中一个或多个实体使用的字段。然后,您可以添加一个字段“type”或“type_id”,这将说明您的实体是否是产品、产品评论...

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

      【讨论】:

        【解决方案3】:

        您可能希望有 3 个索引,分别称为 Products、ProductReviews 和 Articles。每个索引都可以有自己的架构。 Lucene 和关系数据库方法之间的区别在于,数据库中的一行,大致 转换为 Lucene 中的文档。注意:每个文档都可以有自己的架构(这是与关系数据库的另一个区别)。

        【讨论】:

          【解决方案4】:

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

          使用 Solr,您还可以选择多核。每个核心都有自己的架构。您可以为每个实体定义一个核心。

          【讨论】:

            猜你喜欢
            • 2010-11-03
            • 2013-11-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-07-31
            • 2011-10-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多