2012-04-22 55 views
0

目前,我想建立類似這樣一個 http://www.indeed.com/jobs?q=sales&l= (我最大的擔憂是在左邊的搜索過濾器的搜索引擎獅身人面像指數的主要區別哪些搜索結果由不同的參數組成)。什麼是從MySQL索引,允許更快的搜索和聚合

目前我們使用的數據庫是MySQL。我做了一些初步研究,人們不斷告訴我,我的問題是由於沒有正確使用mysql索引而引起的。我花了數月的時間深入研究mysql索引,緩存等,只是發現mysql根本無法解決這個問題。 B-樹是一件好事,但它有其侷限性,並且沒有辦法設置允許同時在多個列上進行所有類型的搜索(全文本,範圍等)的索引類型(然後還有小組 - 一次最後多次)。

經過更多的Google搜索和交談之後,我發現了一個名爲Sphinx的東西,據稱它能夠解決這些類型的任務。不過,我似乎無法找到一本好書或研究來解釋和說明獅身人面像如何實現這一目標。如果你能向我解釋這是如何工作的,或者至少指向一本好書的方向,那將是非常棒的!基本上我想了解獅身人面像背後的技術是100%確定它可以解決我面臨的問題。

謝謝!

回答

1

在最基本的,獅身人面像實現倒排索引http://en.wikipedia.org/wiki/Inverted_index

這非常適用於全文搜索。可以肯定的是Mysql的「全文」索引也使用倒排索引。

獅身人面像通常比mysql更適合搜索 - 因爲它是爲任務設計的工具,而不是'螺栓'。它有更多的配置選項。獅身人面像在性能方面也有很好的表現力,並且竭盡全力來實現這一點。例如,屬性保存在內存中,用於快速索引查找。

它還具有諸如使用大量優化的「多查詢」功能在同一數據集上運行多個查詢的功能,這對構建這些類型的界面非常有用。

...因此,獅身人面像將會更加複雜的設置,但結果很有希望會使它值得努力!

我不知道任何文件解釋獅身人面像本身的好處。在「高性能mysql」中有一章可能值得一讀,但沒有涉及到「how」sphinx的作品。

也有一些談判,例如 http://www.slideshare.net/freelancing_god/sphinx-beyond-the-basics 更多:https://www.google.co.uk/search?q=sphinx+talk他們可能是讓獅身人面像的力量的總體情況的好方法。

還有這真的是技術文件:。 http://sphinxsearch.googlecode.com/svn/trunk/doc/internals-index-format.txt

(順便說一句 - 被稱爲小面「左邊的事情」獅身人面像也磨製以及具有技術術語可能會幫助你的研究,但獅身人面像本身一般稱它們爲'group by'或clustering)

+0

順便說一句,證明獅身人面像可以工作。這是一個演示我正在工作http://ww2.scenic-tours.co.uk/serve.php?t=WoNNlJvoNMOMJL5405o88VOhV8V4lOtVtVM#/country%20%22England%22後端完全是獅身人面像 - 沒有其他數據庫。(前端是jQuery,通過一個簡單的json API與sphinx守護進程交談)左側的小平面和主窗口中的圖像搜索都是由獅身人面像驅動的。顯示處理時間 - 在非常適中的數據集上。 – barryhunter 2012-04-23 14:01:08

+0

聽起來不錯,謝謝! 「高性能mysql」是我最近閱讀的書,關於獅身人面像的一節是將我推向獅身人面像的主要事情之一:)另外,我注意到獅身人面像引用了很多關於聚類和分佈式結果代。它不是獅身人面像表演的唯一來源,對吧?即即使沒有很好地分發結果生成過程並將數據集羣到不同的服務器,它仍然會超越MySQL? – Eugene 2012-04-23 14:16:19

+0

那麼沒有'一件事'。獅身人面像在性能方面做了很多工作。另一個是它迫使你進入反規範化模式。 (複製數據以加快查詢速度 - 在mysql中它的典型規格化,在查詢時需要一個昂貴的JOIN)。另外'批量'你做重要的索引作爲後臺進程,提前完成繁重的工作,所以前端查詢很快。 – barryhunter 2012-04-23 14:24:41