2013-11-25 54 views
1

我在MySQL表中有三個字段 - 品牌,範圍和型號,每個品牌和範圍大約有8,000個型號。搜索三個MySQL文本字段組合的最快和最具可擴展性的方式

我正在創建一個jQuery自動完成搜索,它使用json響應將10個最有可能的匹配返回給用戶輸入。一旦至少輸入3個字符,json查詢將匹配用戶輸入與品牌+範圍+模型的串聯。

該系統最初將由一小部分人使用,但最終可能會被成千上萬的人使用,因此我試圖找出執行此搜索的最有效方式。

這樣做我想出的三種可能的方式是:

  • 創建與一個cron作業每天更新,以創建單個領域與品牌+「」在模型表中的新領域+ +範圍「」 +模型和搜索針對該領域
  • 包括在MySQL查詢的級聯和搜索針對此
  • 創建具有級聯的視圖和搜索針對

以下哪種方式(或者可能是不同的方式)是將三個字段組合起來以便被搜索的最快和最具可擴展性的方式?

回答

0
+0

謝謝,從用戶筆記我已經看到這篇文章: 連字' - '字符此刻打破文字。 搜索「GATA-D22S690」之類的內容會發現 包含GATA的所有條目,而不是完整的 連字符文本。即使在文字中,' - '字符也被視爲 單詞停止。如果使用 任何特殊文本搜索修飾符(例如 +, - ,〜),以便在使用全文搜索時發現連字符不正確 也是如此。 大多數模型都有連字符,這是搜索的關鍵部分,我注意到這篇文章很老,你知道這是否仍然是一個問題嗎? – RayZor

0

解決這個問題的通常方法是提供包含每個元素的選擇框。

當選擇品牌時,Ajax將填充範圍的範圍。

當一個範圍被挑選的模型將被填充等等...

這避免錯別字,如「Madza」。

如果您所描述的GUI和用例支配您的sql select,並且您必須允許自由文本字段,並且您可以並且必須讓用戶鍵入「Mazda 6 spacewagon」,然後根據您的3字母規則只有輸入「Maz」纔會啓動一個選擇,那也可能是

SELECT brand, range, model where brand LIKE "$brand%"; 

結果只是太分散了。

+0

謝謝,但系統中已經有一個3下拉順序選擇器 - 這是客戶請求的一個附加組件(我的老闆已經批准),規範是一個單獨的文本字段,可以輸入 - 所以使用你的汽車的例子,我可以期待從'RX7'到'奔馳S級轎跑車'。 – RayZor

+1

然後,我會把你的第一個想法,並創建一個字符串領域,你可以搜索 - 然後根據你的談話與上述ThomasWienart - 刪除連字符(和其他控制字符,如果需要),並刪除連字符時,AJAX搜索被解僱。那麼你會期望鍵入RX7來返回這些記錄。 – Cups

相關問題