2013-10-11 145 views
0

我正在構建一個非常簡單的產品目錄,該產品目錄將存儲產品在mysql表中,並且我想盡可能快地(並且儘可能相關)搜索產品。產品數據庫將會非常大(大約500,000個產品),這就是爲什麼使用「不喜歡」索引的「like」進行搜索非常緩慢。Mysql(全文?)搜索產品

我有許多字段,但只有那些我想搜索有:

  • 的product_id = BIGINT
  • 標題= VARCHAR(255)
  • 描述=文本

我試着嘗試全文搜索,但有一些問題:

  • 我無法通過product_id進行搜索,因爲它是大整數,無法在全文索引內進行索引(有時用戶知道產品的ID)
  • 如果我搜索「Meter XY-123」,則不會收到搜索結果即使單個產品的標題和描述都包含單詞(「米」和「xy-123」)
  • 我無法搜索子字符串 - 例如如果產品的標題是 「Foobar的123」 它應該返回即使用戶搜索:
    • 富杆123
    • 杆123
    • foobar的12
  • 結果也應該按某種相關性排序返回如果我有兩個產品「foobar 123」和「foobar 456」,並且用戶搜索「foobar 4」,那麼兩個產品應該返回(匹配任何單詞),但第二個產品應該排名較高(因爲它也包含數字4)第一個(不包含第4個)。
  • 產品也應該根據哪個字段的值被發現。在這種情況下,product_id字段的權重大於標題的權重,它的權重也高於說明的權重。例如。如果「1234」,那麼用戶搜索:
    • 排名第一的產品應該是已經PRODUCT_ID 1234
    • 之後應該是有排名的產品,包括「1234」的稱號內
    • 事後產品,其中包括該號碼的單裏面描述

什麼是做在這個表上這樣搜索的最佳方式?在我的情況下,給出好結果的唯一方法是分割查詢字符串,並使用「like」運算符爲每個字符串查詢多個查詢,並以某種方式計算權重,但此解決方案的工作速度很慢(對於單個查詢甚至超過15秒這太慢了)。

我不希望所有事情都可能只使用單個查詢,但我正在尋找一種快速且儘可能相關的解決方案。如果這意味着建立某種定製詞索引或類似的我也願意這樣做,我只需要一個想法如何管理呢?

謝謝!

+0

不確定,但您可以嘗試使用查詢擴展的全文搜索 –

+0

我正在使用Sphinx搜索引擎。它適用於全文搜索。請參閱:http://sphinxsearch.com/docs/2.1.2/ – Adam

+0

不幸的是獅身人面像不是一個選項。我只查找mysql(&php)選項。 – j99

回答

0

我們將搜索遷移到獅身人面像..現在我們需要微調結果。