質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

4489閲覧

キーワード検索をMySQLで実装したい。

white_man

総合スコア13

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

2クリップ

投稿2015/10/26 02:22

SQL初心者です。
現在、キーワード検索を実装する案件があります。
キーワード検索とは具体的には、このterateilの画面上部にあるような”キーワードで検索”のようなものです。
想定する状況は、大量のドキュメントがあり、それぞれに複数のキーワードがある場合です。

こういった場合どのような形で実装したらよいのでしょうか?
※漠然とした質問で申し訳ありません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー


[追記]
キーワードがドキュメントの中にあって、それを検索したいという事であれば
全文検索を実装する必要があります。(文書の量と要求されるパフォーマンスによっては単純なLIKE%%での実装でもなんとかなる場合があります)
大まかな流れとしては
0. 日本語を単語等で分割する
0. 分割された日本語を全文検索する
という流れになります。
具体的な実装はRDBMSによって異なるので、具体的な環境と合わせて質問されるのが良いかと思います


検索はパフォーマンスまで考えると、考えなければいけないことが多くありますが、
大まかには以下の様な流れで実装可能です。

[テーブル設計]

  • 記事テーブル(記事IDとタイトル、本文を格納)
  • キーワードテーブル(キーワードID,キーワードを格納)
  • キーワード・記事関係テーブル

(記事IDとキーワードIDを格納。複数のレコードを使う事で1記事大して複数のキーワードが設定できる)

こんな感じで実装します。
[キーワードの追加]
記事に対してキーワードを追加して、キーワードIDを取得する
(その際に同一のキーワードが既に存在している場合はキーワードテーブルへの追加は行わない。)
キーワード・記事関係テーブルにキーワードID/記事IDを持つレコードをキーワードの数だけ追加

[検索(一つのキーワードで複数の記事を検索)]
0. キーワードテーブルからキーワードと一致するキーワードIDを取得
0. そのキーワードIDを使用して、キーワード・記事関係テーブルからレコードを取得
0. 記事関係テーブルの記事IDを使用して記事を取得
*シンプルなケースだと、JOINして一回のSQLで取得できるとは思います。

投稿2015/10/26 02:47

編集2015/10/26 02:58
tanat

総合スコア18713

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

単純な任意一致検索には、SQLのWHERE句でLIKE検索を行いますが、パフォーマンスが悪いです。
MySQLの全文検索機能(FULLTEXT)を利用するのが良いかと思います。

以下、参考ページです。

投稿2015/10/26 02:35

takyafumin

総合スコア2335

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問