目前,我正在尝试构建一个类似于这个http://www.indeed.com/jobs?q=sales&l=的搜索引擎(我最关心的是左边的搜索过滤器,它是按不同参数分组的搜索结果)。
目前我们使用的数据库是MySQL。我做了一些初步的研究,人们一直告诉我,我的问题源于没有正确使用mysql索引。我花了几个月的时间深入研究mysql的索引、缓存等,结果发现mysql提供的东西根本无法解决这个问题。B-tree是一个好东西,但它有它的局限性,而且没有办法设置一种索引,允许同时在多个列上进行所有类型的搜索(全文、范围等)(然后多次对所有内容进行分组)。
经过更多的谷歌搜索和交谈,我发现了一种叫做Sphinx的东西,据说它能够解决这类任务。然而,我似乎找不到一本好的书或研究来解释和说明Sphinx是如何做到这一点的。如果你能向我解释这是如何工作的,或者至少能给我指出一本好书的方向,那就太棒了!基本上,我想了解Sphinx背后的技术,以100%确定它可以解决我面临的问题。
谢谢!
发布于 2012-04-23 21:44:56
在最基本的情况下,Sphinx实现了一个倒排索引http://en.wikipedia.org/wiki/Inverted_index
这对于全文搜索很有效。顺便说一句,我非常确定Mysql的“全文”索引也使用了倒排索引。
Sphinx通常比mysql更适合搜索--因为它是一个专门为搜索任务而设计的工具,而不是一个“螺栓”。它有更多的配置选项。Sphinx在性能上也有很大的优势,并不遗余力地实现这一点。例如,属性保存在内存中,用于快速索引查找。
它也有像“多查询”这样的功能,它使用了许多优化,可以在同一数据集上运行多个查询-这对于构建这些类型的接口非常有用。
..。因此,sphinx的设置将更加复杂,但最终的结果有望使它值得努力!
我不知道有任何文件解释了狮身人面像的好处。在“高性能mysql”中有一章可能值得一读,但没有深入“如何”介绍sphinx的工作原理。
THere也有一些讨论,例如http://www.slideshare.net/freelancing_god/sphinx-beyond-the-basics more:https://www.google.co.uk/search?q=sphinx+talk他们可能是一个了解狮身人面像力量的好方法。
还有一个真正的技术文档:http://sphinxsearch.googlecode.com/svn/trunk/doc/internals-index-format.txt
(顺便说一句,“左边的东西”被称为“面”。Sphinx在刻面方面做得很好。拥有专业术语可能会对你的研究有所帮助。但sphinx本身通常将它们称为“group by”或集群)
https://stackoverflow.com/questions/10273137
复制相似问题