2011-05-23 20 views
1

我剛剛過來這個網站:http://www.hittaplagget.se。如果輸入以下搜索詞moo,則自動提示立即彈出。如何獲得這個閃電般的快速搜索?

但是,如果您轉到我的網站http://storelocator.no,並使用相同的搜索詞組(在「搜索品牌」字段中),自動提示建議任何操作都需要很長時間。

我知道我們只能猜測他們正在使用什麼類型的技術,但希望這裏的某個人可以做出比我更好的教育猜測。

在我的解決方案中,我只做了一個SELECT moo% FROM table並返回結果。 我還沒有索引我的表格,因爲裏面只有7000行。但我正在考慮使用Lucene索引我的表。

任何人都可以建議我需要做什麼才能獲得同樣快速的自動建議嗎?

+0

你比它們慢500毫秒。 – JohnP 2011-05-23 07:54:58

+0

爲儘可能快地搜索,不應通過查詢檢索自動完成結果,而應通過本地JS數組檢索;檢查jQuery自動完成。如果必須進行查詢,則嘗試在sql級別進行優化。可能還有其他因素起作用,它們具有出衆的硬件,更好的網絡延遲(由於全球多服務器)等等。 – virtualeyes 2011-05-23 07:55:52

+0

上面的評論建議通過javascript發送所有7000個項目,甚至不知道用戶是否會做搜索,即使他這樣做,我強烈建議不要那樣做。 – Till 2011-05-23 08:04:53

回答

1

Lucene是一個全文搜索索引,可能是也可能不是你要找的。 Lucene會在整個索引列(例如Mootastic和Fantasticmoo)中找到任何「moo」,並且不一定會加快搜索速度,儘管它比像'%moo%'類型的搜索更快。

正如其他人已經指出一個常規索引(可能甚至是唯一的?)是你想要的,如果你正在執行「開始」類型的搜索。

1

您需要將表掃描表,所以我建議:

  • 不要把任何表中的行,你並不需要 - 例如,「不活躍」的記錄 - 讓他們在不同的表格
  • 不要在表格中放置任何不需要的列
  • 您可以通過使用一個特殊的「搜索表」來實現這一點,該搜索表只包含您感興趣的行/列,並更新它來自「主表」。

如果行很小,對7000行表進行掃描應該是非常有效的;我從你的問題領域瞭解到,情況就是這樣。

但正如其他人指出的那樣 - 不要在發送7000行到客戶端時不需要它。

傳統索引可以將LIKE'someprefix%'優化爲範圍掃描,所以它可能有幫助。如果你想在條目的任何部分搜索字符串,它將是一個表掃描(在這樣一個小桌子上不應該慢!)