【发布时间】:2012-10-18 07:43:41
【问题描述】:
我的 Rails 3 应用程序有一个站点范围的自定义编写搜索控制器,并希望包含来自该站点的 WordPress 博客的结果。在我的 Rails 应用程序中对帖子执行关键字搜索的最佳方式是什么?
【问题讨论】:
-
不确定这是否可行,但它们是否共享同一个数据库?
标签: ruby-on-rails ruby-on-rails-3 wordpress
我的 Rails 3 应用程序有一个站点范围的自定义编写搜索控制器,并希望包含来自该站点的 WordPress 博客的结果。在我的 Rails 应用程序中对帖子执行关键字搜索的最佳方式是什么?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 wordpress
如果您共享数据库,则只需对其使用 SQL 查询。此解决方案为您提供了直接数据库查询的速度,但您需要正确构建该查询才能获取所有相关数据。
如果您无法从 Rails 应用程序访问 WP 数据库,那么最好的方法是使用 curl、httparty、RestClient 或任何其他文件检索库。
为此,请使用自定义模板创建 Wordpress 页面,该页面将以最适合您在 Rails 应用程序中解析的格式输出搜索结果(json、xml、csv、urlencoded 等)。
然后使用 curl/RestClient/httparty 从您的 Ruby 应用程序请求该 WP 页面...
此解决方案为您提供了 WP 模板标签和函数的强大功能来获取结果。
另外,您无需从头开始创建自定义模板,您只需从核心模板复制和调整 search.php 即可以 Rails 应用程序所需的格式提供结果。
使用此解决方案,您缺乏直接访问 db 的速度,因为所有搜索结果都必须通过 http 管道传输,并且您必须两次处理数据(在 WP 中编码为正确格式,在 Rails 应用程序中解码) .
【讨论】:
有趣的问题。我想我会这样处理它:
使用 RSS 作为从博客到 Rails 应用程序的文本传输。这允许将来灵活地添加更多博客、更改您的博客引擎、数据库主机等。它还可以保护您免受 Wordpress 代码更新的影响。鉴于 Wordpress 的安全历史,无论如何我都喜欢将它们托管在受保护的沙箱中。 RSS 是博客的母语,因此它似乎很适合这种内容集成。
使用 feedzirra gem 将 RSS 条目导入到 Rails 模型中。
使用 Elasticsearch 和 tire 在 Rails 应用和博客条目中进行模糊文本搜索。详情请见this Railscast。
【讨论】:
选项 1. 是对两个站点都使用搜索引擎,例如 elasticsearch、solr 等。所以你从 rails 和 wordpress 填充索引。
选项 2。您编写脚本,定期读取您的 wordpress RSS 并将数据保存在您的 rails 应用程序中。
最后你应该避免从不同的来源搜索,你应该将数据收集到一个地方然后搜索。
【讨论】:
您不必拘泥于 wordpress。您可以使用 Google 搜索 API。 Web search api 已被弃用,但 still working。它的替换是Custom Search API。超限查询可能需要付费。
您也可以利用其他搜索引擎 API,例如 Bing Search API。
【讨论】:
我建议使用 Wordpress JSON API 并使用 solr 或类似工具将其插入您的搜索中。您可以在创建帖子时进行索引,然后通过 sam JSON 接口调用文章。
【讨论】:
在 ElasticSearch 中使用 Tire 和 wp-elasticsearch。
【讨论】: