微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 使用带有ORM的Sphinx搜索

我正在寻找在我们的网站内实施Sphinx搜索.

与使用包含新库等做出奇怪的事情不同,使用SphinxQL对它进行集成更有意义,因为这与本机sql非常接近
.
但是,我担心我们可能最终不得不重新发明轮子,以便我们可以在我们的系统中使用Sphinx.

为了防止这种情况,我想将Sphinx拖入我们的ORM系统.

有没有人曾经尝试过这个,或者我们可能遇到的任何问题都可以做到这一点?

我们目前使用Zend Framework和Propel的混合

解决方法:

很长时间在这里推动用户最近使用Zend Framework将Sphinx添加到我们的应用程序中.

关于Propel和MVC的注意事项

我在过去几个月的发展过程中注意到的是,我希望我能更直接地利用Propel提供的抽象.您可能知道,Propel为ORM创建基类以及只是扩展基类的空类.

目前,许多业务逻辑依赖于单独的模型,而完全相同的逻辑可以简单地实现为扩展的Propel类中的方法.

你应该采用相同的方法来实现Sphinx搜索.尝试使用扩展的ORM类来抽象它.

关于狮身人面像的注释

>创建视图以简化索引:Sphinx无法与高级子查询一起使用,并且很容易被MySQL函数搞糊涂.尝试抽象您想要索引的数据,以便总sql与SELECT id,field1,field2,field3 FROM MyView一样简单.当您可能希望将每个Sphinx文档与用户帐户或其他一些非常重要的外键关系相关联时,这尤其有用.
> Sphinx只能索引UINT:在大多数情况下可能是不费脑子的,但你不能使用UUID或负数来解决各种奇怪的数据库结构.
>避免重复的文档ID:在每个Sphinx索引中,每个文档ID必须是唯一的.我们假设您想要使A类对象可搜索,但您希望通过搜索标签,注释和地理位置来查找对象A.使用Sphinx执行此操作的正确方法是使用关于对象的所有元数据创建索引A,并为注释,标记和地理位置创建单独的索引,并确保将属性sql_attr_uint映射回到对象A,然后找出什么在您的代码中检索.
>使用最新版本的Sphinx:Sphinx正处于快速发展阶段,像Debian这样的发行版往往在存储库中有一个非常过时的版本.如果可能并且您有时间确保稳定性,请从源代码编译(Sphinx具有很少的依赖性,因此在大多数情况下它不会成为问题).此外,PHP代码具有故障安全功能,可防止客户端代码与更新版本的Sphinx搜索守护程序通信.
> Sphinx的范围:执行搜索后,仍然需要从数据库中检索相关信息,因为Sphinx只会为您提供匹配条目的ID.在某些情况下,使用以下内容可能是明智之举:

$a = AQuery :: create()
          – &GT findByPk(ID_FROM_Sphinx)

在foreach循环中.但在某些情况下,依靠ORM获取列表可能效率太低,特别是如果您只想列出几列,例如搜索结果.然后,您可以使用自定义优化的sql选择来获取信息(可以在Propel类中执行).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐