2013-06-28 219 views
0

嗯,我需要在我的應用程序上實現一些搜索參數,並不能提出任何更好的解決方案,所以我希望你們可以幫助我,我的概率去像這 - >複雜的mysql搜索查詢,'布爾和'關鍵字搜索mysql字符串

我有一個表與下面的列,
ID,質疑

現在我應該搜索關鍵詞,各種指標分析,如 - >

  1. 如果我搜索關鍵字「返回的問題應該包含「心臟」和「疾病」這兩個詞
  2. 像「我們有一個心臟疾病」這樣的句子因爲「心臟」包含「心臟」而被返回,但是像「我們有一個心臟病」將不會被退回,因爲「foo」在「心臟」之前,根據給定的標準,這是不可接受的。但是任何「心臟」或「疾病」都是可以接受的。

那麼這些都是給出的標準,我知道我的英語不是那麼令人印象深刻,並且無法正確解釋我的問題。但我希望有一個解決方案!謝謝!!

+0

究竟什麼是你的問題? – Dan455

+0

看起來像你忘了你的帖子的其餘部分。 – Kevin

+0

對不起,在完成之前發佈! – Mandeep

回答

1

你可能會更喜歡像Lucene這樣的全文搜索引擎,但是你可以在mysql中完成。你只需要建立基於單詞數量的搜索條件。對於很多情況下,這將是一個非常低效的查詢。

select * from table 
where text like '% heart%' and text like '% disease%' 

Link to SQLFiddle

應該工作。

請注意,這不一定是完整的解決方案。以下價值不會被退回,因爲在疾病或心臟之前沒有空間。

Diseases are bad.Hearts are very susceptible. 

問題當然是,你將不得不開始建立很多特殊情況。爲了解決這個意見,我教的例子,你就必須在規則中增加,如:

select * from terms 
where (terms like '% heart%' or terms like 'heart%' or terms like '%.Heart%') 
    and (terms like '% disease%' or terms like 'disease%' or terms like '%.disease%') 

Link to more advanced case

你也可以用某種正則表達式的做到這一點。這將處理你提出的案例。

select * from terms 
where (terms like 'heart%' or terms REGEXP '[ |\.]heart') 
    and (terms like 'disease%' or terms REGEXP '[ |\.]disease') 

Example with regular expressions

+0

嗯,我試過,但概率是這隻適用於不以「心臟」和「疾病」字開頭的問題,例如「心臟病是不好的」將不會被返回。雖然謝謝你的回覆! – Mandeep

+0

我自己做過的事情就是這樣---- >>> http://www.sqlfiddle.com/#!2/35c16/4,我知道它錯了,但是希望改進它 – Mandeep

+0

它的壞,我不能代表+ +:D是新的和所有的,我會解決您的查詢,再次感謝您 – Mandeep