在 Web 项目中使用 SOLR 的最佳方法是啥?

Posted

技术标签:

【中文标题】在 Web 项目中使用 SOLR 的最佳方法是啥?【英文标题】:What's the best approach for using SOLR with web projects?在 Web 项目中使用 SOLR 的最佳方法是什么? 【发布时间】:2010-12-14 21:12:12 【问题描述】:

好的,我对 SOLR 和 Lucene 完全陌生,但是在 Tomcat 6.x 下已经让 Solr 开箱即用,并且刚刚浏览了一些基本的 Wiki 条目。

我有几个问题,也需要一些建议。

    Solr 可以索引文件(XML、CSV)中的数据,也可以索引 DB。你也可以将它指向一个 URI/域,并让它以谷歌的方式索引一个网站吗?

    如果我有一个网站,其中包含“页面”数据,即“页面名称”、“页面内容”等,以及“产品数据”,即“产品名称”、“SKU”等,我是否需要两个不同的 Schema.xml 文件?如果是这样,这是否意味着 Solr 的两个不同实例?

最后,如果您有一个包含大型关系和规范化数据库的项目,您认为以下 3 个选项中的最佳方法是什么?:

    在后台运行一个中间件服务,它挖掘数据库并手动创建相关的 XML 文件,然后发送到 SOLR

    让 SOLR 直接索引 DB。在这种情况下,最好只将 SOLR 指向视图,这将抽象所有表关系?

    还有其他我不知道的选项吗?

上下文:我们在 Windows 2003 环境、.NET 3.5、SQLServer 2005/2008 中运行

干杯!

【问题讨论】:

【参考方案1】:
    不,您需要一个爬虫,例如Nutch 是的,您需要两个单独的索引(= 两个 schema.xml),因为数据集似乎不相关。这并不意味着两个 Solr 实例,您可以使用 Cores 管理这两个索引。

至于填充 Solr 索引,这取决于您的特定项目,例如,它是否可以容忍过时的数据或是否必须绝对新鲜。

索引数据的其他选项包括:

数据库触发器 如果您使用某种 ORM,请使用它的拦截功能。例如,您可以使用 NHibernate 事件在更新、插入或删除时更新索引。如果你使用 NHibernate 和 SolrNet 这是taken care of automatically

【讨论】:

+1 谢谢 Mauricio,这真的很有用。我想知道您是否可以在一点上扩展一点,可能是两个。就陈旧数据和新数据而言,我使用什么数据源并不重要吗?只有我多久提交一次更改...假设所有提交(添加/更新/删除)必须手动完成,对吗?至于 SolrNet,我根本不需要担心手动与 SOLR 通信吗?再次感谢 关于数据新鲜度:这取决于数据的用户(消费者)。如果消费者需要始终查看可以排除离线/后台索引方法的最新数据,那么您必须使用更具反应性的东西,例如触发器或 ORM 拦截。当然,在索引网页时您没有任何“触发器”,您唯一的选择是爬虫。是的,SolrNet 处理 .Net Solr 通信。 @mauricio:谢谢。我们使用自定义 CMS 来构建我们的网站。那么,您认为每当在 CMS 中编辑页面/产品时,通过 XML 向 Solr 提交更新/删除是一个明智的决定吗?而且我们不使用 Nhybernate,所以我想 SolrNet 没有任何好处。再次感谢,这真的很有帮助 NHibernate 集成只是 SolrNet 的功能之一。它的主要目的是处理所有 Solr XML / HTTP 通信,并为所有 Solr 操作提供一个 .Net 接口。 感谢 Mauricio,我想我会使用 Solrnet,感谢开源。 Solrnet 是否负责为 Solr 编写模式?如果是这样,如何?如果没有,那么我必须自己编写架构吗?干杯!【参考方案2】:

我认为毛里西奥非常愿意听取他的建议。我要说的唯一一点是,在决定使用“中间件”索引器或直接使用数据库时。如果您的数据库(或视图?)与良好的 Solr 模式所需的映射非常接近,那么 DIH 就很棒。但是,如果您要从多个数据源建立索引,或者如果您必须调整数据库中的数据以满足 Solr 的需求,那么使用专用的中间件索引器会更好。

【讨论】:

“死”,我的意思是非常准确!以防万一有人感到困惑! 很酷,感谢 Eric 的额外建议。我只是想知道拥有中间件是否完全愚蠢,但我认为这在一个环境中是有意义的,正如你所说,数据源是多种多样的。干杯! +1

以上是关于在 Web 项目中使用 SOLR 的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Web:建立后端/前端关系的最佳方式是啥?

在 datastax 图中使用 gremlin 访问 Solr 的最佳方法

使用 kotlin 创建 Web 应用程序的最佳方法是啥?

使用尽可能少的资源,模拟挂起的 Web 应用程序的最佳方法是啥?

使用 Django(或任何 Web 框架)的 AJAX 的“最佳实践”是啥

如何在eclipse中部署solr的web工程