我的Rails 3应用程序有一个站点范围的自定义编写搜索控制器,并希望包含该网站的WordPress博客的结果。在我的Rails应用程序中对帖子执行关键字搜索的最佳方式是什么?
答案 0 :(得分:5)
如果您共享数据库,则只需对其使用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应用程序中解码)
答案 1 :(得分:1)
有趣的问题。我想我会像这样接近它:
使用 RSS 作为从博客到rails应用的文本传输。这样可以灵活地在将来添加更多博客,更改您的博客引擎,数据库主机等。它还可以保护您免受Wordpress代码更新的影响。鉴于Wordpress的安全历史,我喜欢将它们托管在受保护的沙箱中。 RSS是博客的母语,因此它似乎很适合这种内容集成。
将feedzirra gem 导入RSS条目用于导轨模型。
在您的rails应用和博客条目中,使用Elasticsearch和tire进行模糊文本搜索。有关详细信息,请参阅this Railscast。
答案 2 :(得分:0)
选项1.是为两个站点使用搜索引擎,如elasticsearch,solr等。所以你从rails和wordpress填充索引。
选项2.您编写脚本,定期读取您的wordpress RSS并将数据保存在rails应用程序中。
最后你应该避免从不同的来源搜索,你应该将数据收集到一个地方然后搜索。
答案 3 :(得分:0)
你不必坚持使用wordpress。您可以使用Google搜索API。 Web search api已被弃用,但still working。它的替换是Custom Search API。如果查询超出限制,您可能需要付费。
或者,您可以利用其他搜索引擎API,例如Bing Search API。
答案 4 :(得分:0)
我建议使用Wordpress JSON API并使用solr或类似方法将其插入到您的搜索中。您可以在创建帖子时编制索引,然后通过sam JSON界面调用文章。
答案 5 :(得分:0)
使用Tire和wp-elasticsearch与ElasticSearch。