2010-06-30 62 views
4

我有10,000,000條記錄,這將是搜索記錄的最佳技術,目前我使用全文搜索,但速度很慢,請建議。哪一個是搜索記錄的最佳serach技術

+0

請給出一些更多的信息和代碼(關於您的表格結構) – Thariama 2010-06-30 07:41:19

+0

給我們更多的細節:你在搜索什麼,這些記錄的頻率和方式如何? - 簡單地說 - 請給我們一些例子。 – 2010-06-30 07:42:37

+0

考慮一個包含五個表的數據庫的情況,並且我只在一個表上用100列進行選擇,其中20個用於全文索引。 所有的列值都是文本值並經常變化。這會幫助大師(你們全部)。 :) – Jos 2010-06-30 07:47:44

回答

1

這取決於以下幾個簡單的問題:

  • 什麼樣的數據進行處理? (簡單的條目,如「名字,姓氏」,或更復雜的數據集?
  • 它是如何構成的?(普通數據庫表?分區?)
  • 你怎麼尋找?(即搜索在電話目錄名)
7

沒有一個放之四海而皆準的解決辦法,但你可以嘗試一下:

獅身人面像

如何實現全文海對於1000萬行以上的表格,請保留 並保持相關性? 獅身人面像擅長那些 謎語。

斯芬克斯是全文搜索引擎, GPL版本2 商業許可下發布的,也是嵌入式應用提供 。

一般來說,它是一個獨立的搜索引擎 ,旨在爲客戶提供快捷, 規模效益和有關全文 搜索功能到其它 應用。 Sphinx特別設計用於與SQL 數據庫和腳本語言很好地集成。 目前內置的數據源 支持讀取數據或者通過 直接連接到MySQL或PostgreSQL的 或使用XML管道 機制(一管索引中獅身人面像 識別 特殊的基於XML的格式)。

至於名稱,獅身人面像是一個首字母縮寫詞 它被正式解碼爲SQL 短語索引。是的,我知道CMU的 Sphinx項目。

http://www.sphinxsearch.com/

Lucene PHP (Part of Zend Framework): 

Zend_Search_Lucene是一個完全由PHP 5編寫 一般 通用文本搜索引擎是因爲它存儲了 指數上的文件系統,並且不 需要一個數據庫服務器,它可以將 搜索功能添加到幾乎所有的 PHP驅動的網站。Zend_Search_Lucene的 支持以下功能:

  • 排名功能的搜索 - 最好的結果顯示第一
  • 許多強大的查詢類型:短語查詢,布爾查詢,通配符
    查詢,近似查詢,範圍
    查詢等等。
  • 搜索特定的字段(例如,標題,作者,內容)

http://framework.zend.com/ http://framework.zend.com/manual/en/zend.search.lucene.overview.html

+0

+1用於提示Zend_Lucene。從來沒有用過這麼多的東西,但從來沒有性能問題。 – Maerlyn 2010-06-30 09:19:14

0

,因爲我沒有這麼大的數據集這樣的在這裏工作有一些想法,可能工作:

第一個問題是,這些記錄是靜態的(geoip的例子)或不?

  • 我會嘗試儘可能多的優化我的數據庫,我可以(嘗試使用EXPLAIN如果你使用MySQL)
  • 查找出每一個類型的查詢,可以是有可能,儘量優化數據庫針對這些查詢
  • 如果索引很好,我會用某種緩存去保存以前的結果集。當你的數據庫沒有正式更新時,這會很方便。
  • 可以和cron上面的工作(例如:最常用的搜索查詢及其結果可以過預緩存)
  • 嘗試優化這些想法爲您的需求

如果你也許可以提供一些更多的細節我可以改進我的提示。

+0

這些都是非常有用的技術感謝 – Jos 2010-06-30 08:02:19

0

使用Solr。這是lucene,通過http協議可以輕鬆訪問一些附加內容。與任何來自mysql的全文搜索相比,它的速度非常快。

相關問題