0

item という名前の単純なテーブルを持つ mysql データベースがあります。アイテムには次のフィールドが含まれ、55,000 レコードがあります。

ID (PK) 説明 (INNODB FULL TEXT) 日付

一部の説明には項目 1 a 2 42 などの名前が含まれているため、スペースをそのままにしておく必要があるため、設計上、1 文字の単語までインデックスを作成する必要があります。このテーブルに対して全文検索を実行しています。次のコードの結果は次のとおりです。

Select ID, Description, Date
From Item
WHERE date > DATE_SUB(NOW(), INTERVAL 15 MONTH)
AND description LIKE CONCAT('%item 1 2 a 4%')
AND MATCH (description) AGAINST ('+item +1 +2 +a +4' in boolean mode);

このクエリは 1.2 秒で返されます。ただし、次の近接検索をクエリに追加すると、帰りの時間が屋根を通り抜けます。

Select ID, Description, Date
From Item
WHERE date > DATE_SUB(NOW(), INTERVAL 15 MONTH)
AND description LIKE ('%item%')
AND MATCH (description) AGAINST ('+item +1 +2 +a +4' in boolean mode)
AND MATCH (description) AGAINST ('"1 2 a 4" @30' in boolean mode);

このクエリは54 秒で返されます。 「item 1 2 48884848 222 a」ではなく「item 1 2 a」を見つける必要があるため、近接検索は私のクエリには必須です。近接検索は、単語が 1 文字を超える場合にはるかに適切に実行されますが、ユーザーが 1 文字の単語を入力する必要がある場合もあります。フルテキストinnodbの近接検索の代わりになるが、パフォーマンスがはるかに優れている他にできることはありますか? MYSQLに他に何もない場合、私は何かを統合してより良い近接検索を提供することにオープンです(私はWindowsを使用しています)。

ありがとう!

4

2 に答える 2