如何使用MySQL-InnoDB配置Django进行全文搜索。 MySQL Myisam引擎支持全文搜索,但我将使用InnoDB。这是使用Sphinx的最佳方式吗?如果你解释你的配置,我将不胜感激。 (顺便说一句,我想知道它是如何与postgresql一起工作的。)
答案 0 :(得分:4)
虽然它可以配置为自动与MySQL通信,但Sphinx实际上是MyISAM或InnoDB的独立工具。它提供了比MyISAM中简单的全文搜索更好的处理和性能,但当然价格是同时查询基于搜索和数据库的条件变得困难。您可以使用SphinxSE(存储引擎)通过MySQL进行查询和连接,但它不像在数据库引擎中保存它那样灵活,并且连接效果不佳。
否则,您可以采用MyISAM和InnoDB的混合方法。将所有规范数据放入正确的InnoDB表中,并使用MyISAM存储全文搜索量表。对于正常操作,您只需触摸InnoDB内容;只有在进行全文搜索时才需要加入MyISAM表。然后,您必须确保在成功交易后从插入到InnoDB表中的任何新文本更新MyISAM表。
虽然MyISAM缺乏交易支持可能会偶尔使数据在并发或错误条件下不一致(这种危险显然也适用于像Sphinx,Lucene等人那样的单独的全文本存储解决方案),但实际上这不是一个大问题因为它只是变得不一致的searchbait,而不是你的实际数据。您也可以借此机会以不同的方式处理您的全文内容,例如通过应用简单的词干,因为MySQL本身并没有实现。
PostgreSQL有自己的内置全文文件,基于@@
运算符。它并不完全取决于Sphinx的速度,但在功能方面领先于MyISAM FULLTEXT(例如词干,词典,更好地处理相关性值),你仍然可以将它与其他查询条件自由组合。
答案 1 :(得分:2)
您想查看Haystack
吗?搜索不一定很难。 Haystack允许您编写一次搜索代码,并选择您希望它运行的搜索引擎。有了一个熟悉的API,可以让任何Djangonaut感觉像在家里一样,并且允许你根据需要交换进出的架构,这就是搜索应该如何。
答案 2 :(得分:1)
上次我打算做这件事我想尝试django-sphinx,所以这也可能是你的选择。