約100,000行のテーブルがあります。
各行には、文、文の断片、または句が含まれます。
基準内の単語の順序が文とは異なる場合でも、すべての単語セットを含むすべての行を検索するクエリを作成したいと思います。
たとえば、私のテーブルが次のようになっている場合:
id sentence
-- ---------------------------------------------------------------------------
1 How now brown cow
2 Alas, poor Yorick! I knew him
3 Call me Ishmael
4 A screaming comes across the sky
5 It was a bright cold day in April, and the clocks were striking thirteen
6 It was the best of times, it was the worst of times
7 You don't know about me without you have read a book
8 In the late summer of that year we lived in a house in a village
9 One summer afternoon Mrs. Oedipa Maas came home from a Tupperware party
10 It was a queer, sultry summer, the summer they electrocuted the Rosenbergs
私のクエリ基準は、特定の順序で1つ以上の単語になります。
結果セットには、すべての単語を含むすべての文が含まれている必要があります。
たとえば、基準がの場合the was
、結果には行5、6、10が含まれる必要があります。
理想的には、これを改善して、クエリに単語の先頭のみを含める必要があるようにします。(ユーザーが単語の先頭のみを入力できるようにし、途中または末尾だけは入力できないようにしたいことに注意してください)。
たとえば、基準がの場合elect sul
、結果には行10が含まれます。
現在、これを行う方法は次のとおりです。
SELECT
id, sentence
WHERE
(sentence LIKE 'elect%' OR sentence LIKE '% elect%')
AND
(sentence LIKE 'sul%' OR sentence LIKE '% sul%')
これは機能します(私は思います...)-それはそれがすべきすべてを見つけます。ただし、非常に遅いです。
これを行うためのより良い方法はありますか?
価値があるのは-テーブルを再設計したり、追加の「ヘルパー」テーブルを作成したりする柔軟性があります。
たとえば、すべての一意の単語の行と、それを含む文の各行のキーを含むテーブルを作成することを考えました。
また、クエリはMySQLで機能する必要があります。
よろしくお願いします。