2014-07-12 52 views
0

我正在嘗試搜索多個關鍵字的表格。不過,我並不是在尋找一個關鍵字甚至是10個。它大約有一千個關鍵字。這些關鍵字也在一個表格中並且可以被控制。我寧可不要硬編碼這些關鍵字到我的SQL命令搜索數據庫表中的大量關鍵字列表

目標表我在尋找含有大量的文字和單元可以包含一個完整的句子或段落...這樣做有點像'全文搜索mySQL似乎是一個好的開始。

與此非常相似的問題,但同樣,當我說多關鍵字的,我的意思是幾百到幾千。 mysql FULLTEXT search multiple words

我可以轉儲我的關鍵詞表到一個數組,運行全文搜索?這甚至可以用mySQL來處理,還是有限制我不考慮?我也打開其他技術建議。對不起,我沒有發佈代碼或錯誤。我首先試圖從概念上理解如何解決這個問題。 -tia

回答

0

最近我不得不做類似的決定。我決定去用lucene。我將可索引字段存儲在lucene中,併爲mysql行返回一個id。

另一個選擇是獅身人面像,一個完整的教程可以發現here

查看相關帖子here。和here

+0

感謝您的提示。我會對此進行閱讀,但乍一看,在這些帖子中我沒有看到任何關於搜索存儲在表格中的多個關鍵字的參考。儘管這些鏈接似乎涉及擴展問題,但大部分鏈接仍然是關於搜索單個關鍵字/短語/字符串。 – nodoze

0

SELECT * FROM articles WHERE body LIKE'%$ keyword%';

+0

和%$關鍵字%可以是整個值表?或者至少是整列?請解釋。對於缺乏理解感到抱歉。 – nodoze

0

你只需要在你的mysql查詢中使用for循環來讀取所有的keyworks。

它清楚地表明你分開你的關鍵字逗號或 -

,所以你需要用逗號爆炸關鍵字並把它們放在一個變量。

例如:

$keywords = "key1,key2,key3,..."; // values come from keywords column from db. 

現在你只需要$爆炸關鍵字。

$keys=explode(',',$keywords); 

終於在查詢你需要使用一個for循環:

$query = "SELECT * From targettable"; 
      $i = 0; 
      foreach ($keys as $key) 
      { 
      $query .= "WHERE keywords LIKE '%".$key."%')"; 
      $i++;  
      }  

我命名你的關鍵字列= 「關鍵詞」。

您還可以輕鬆地將您的其他條件添加到$查詢中。

+0

謝謝!您認爲從性能和可擴展性的長期來看,這是否可行? (大約兩千個關鍵詞)我今天將開始測試,看看它是如何發展的。 – nodoze

+0

有沒有更好的方法來處理這個問題,而不是將所有關鍵字硬編碼到查詢中?我們將緩慢地向表中添加關鍵字。 – nodoze

+0

如果你的表正在使用MyISAM,你可以用FULLTEXT查詢,但我不知道性能。只需檢查一次:[鏈接](www.websanova.com/blog/mysql/mysql-full-text-search#.U8Ivlaitv-Z) –

0

當心與MySQL全文搜索,如果您的結果集是整個數據集的> 50%時,MySQL認爲這是一個失敗的搜索,你不會得到任何東西。

這聽起來很可能發生,如果你有1000個可能的單詞的命中列表。

我說你會更好調查的關鍵字從文本中提取(讓我們來想象他們的文章),因爲它們被存儲。

然後將這些關鍵字存儲在自己的表中。

爲了獲得最佳結果,您可能需要調查自然語言處理,並從文章中提取含義,而不是單詞。

相關問題