0

アプリケーションにいくつかの検索パラメーターを実装する必要がありましたが、より良い解決策を思い付くことができなかったので、皆さんが私を助けてくれることを願っています。


次の列id、questionを持つテーブルがあります

今では、-> などのさまざまな基準でキーワードを検索することになっています。

  1. キーワード「心臓病」を検索すると、返される質問には「心臓」と「病気」の両方の単語が含まれている必要があります
  2. 「心から」には「心」が含まれているため、「心疾患があります」などの文は返されますが、「心」の前に「心疾患」があるため、「心疾患があります」などの文は返されません。与えられた基準に従って。ただし、「心臓」または「病気」に続くものはすべて許容されます。

これらが与えられた基準でした。私は自分の英語がそれほど印象的ではなく、自分の問題を適切に説明できていないことを知っています. しかし、私は解決を願っています!! ありがとう!!

4

1 に答える 1

1

おそらく Lucene のような全文検索エンジンを使用したほうがよいでしょうが、mysql でそれを行うことができます。単語数に基づいて検索条件を作成するだけです。多くの場合、これは信じられないほど非効率的なクエリになります。

何かのようなもの

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

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%')

より高度なケースへのリンク

何らかの正規表現を使用してこれを行うこともできます。これは、あなたが提起したケースを処理します。

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

正規表現の例

于 2013-06-28T17:27:12.583 に答える