6

現在、私は検索機能を行っています。私のデータベースには、次のデータがあるとしましょう。

  • キーワード1
  • キーワード 2
  • キーワード3
  • キーサムシング

ユーザーは、検索するキーワードとして「Key」と入力しました。これは私の現在のクエリです:

SELECT * FROM data WHERE (
  data_string LIKE '$key%' OR 
  data_string LIKE '%$key%' OR
  data_string LIKE '%$key'
)

基本的に、2 つの質問があります。

  1. 類似度で並べ替える (並べ替える) 方法を教えてください。上記の例から、最初の結果として「キー」が必要でした。私の現在の結果は、Keyword1、Keyword2、Keyword3、Keysomething、Key です。

  2. 私の SQL クエリは "data_string" 列でのみ検索します。他の列を検索したい場合はどうすればよいですか? 私はこのようなことをする必要がありますか:

SELECT * FROM data WHERE (
  data_string LIKE '$key%' OR
  data_string LIKE '%$key%' OR
  data_string LIKE '%$key'
) OR (
  data_other LIKE '$key%' OR
  data_other LIKE '%$key%' OR
  data_other LIKE '%$key'
) -- ...

Q2 よりも優れた/高速なクエリはありますか?

4

1 に答える 1

8

LIKEこれを行う正しい方法かどうかはわかりません。テキスト内でキーワードを検索し、結果を関連性スコアで並べ替える必要がある場合は、 MySQL全文インデックスMySQL 全文検索関数を使用する必要があります。これがあなたが実際にやろうとしていることからあなたを遠ざけている場合は申し訳ありませんが、一度見てみることをお勧めします. MySQL リファレンス マニュアルからの引用:

1) テーブルの複数の列に全文索引を作成する方法

mysql> CREATE TABLE articles (
    ->   id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    ->   title VARCHAR(200),
    ->   body TEXT,
    ->   FULLTEXT (title,body)
    -> );

2) サンプルデータ

mysql> INSERT INTO articles (title,body) VALUES
    -> ('MySQL Tutorial','DBMS stands for DataBase ...'),
    -> ('How To Use MySQL Well','After you went through a ...'),
    -> ('Optimizing MySQL','In this tutorial we will show ...'),
    -> ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
    -> ('MySQL vs. YourSQL','In the following database comparison ...'),
    -> ('MySQL Security','When configured properly, MySQL ...');

3) 複数の列でキーワードを検索し、結果 + スコアを表示するサンプル クエリ:

mysql> SELECT id, body, MATCH (title,body) AGAINST
    -> ('Security implications of running MySQL as root') AS score
    -> FROM articles WHERE MATCH (title,body) AGAINST
    -> ('Security implications of running MySQL as root');
+----+-------------------------------------+-----------------+
| id | body                                | score           |
+----+-------------------------------------+-----------------+
|  4 | 1. Never run mysqld as root. 2. ... | 1.5219271183014 |
|  6 | When configured properly, MySQL ... | 1.3114095926285 |
+----+-------------------------------------+-----------------+
于 2010-05-18T06:31:15.877 に答える