web-dev-qa-db-ja.com

エラスティック検索全文vs mysql全文?

私はlaravelアプリに検索機能を実装しようとしています。データセキュリティの問題のため、上司はアンゴリアを優先していません。それ以外に、エラスティック検索を実装することと、 mysqlからの全文検索。長所と短所がわからないため、エラスティック検索の方が適しているといくつかの場所で読んだことがありますが、これまで作業していないので、何を使用しているかを理解したいと思います。この前に検索して。

MySQLの要件を検討していますが、InnoDbエンジンでは5.6以上でのみ実装できるようです。それ以外は、charおよびtextタイプのフィールドにのみフルテキストインデックスを実装できます。 Elastic searchで許可されているフィールドの種類がわかりません。

私は次のようなことをしなければならないことを知っています:

DB::statement('ALTER TABLE posts ADD FULLTEXT search(title, body)');

次に、私は次のようなことをすると思います:

SELECT * FROM posts
WHERE MATCH (title, body)
AGAINST ('foo' IN NATURAL LANGUAGE MODE);

これにはEloquent実装がありますか、それともDBファサードを使用して手動で行う必要がありますか? Eloquent実装がない場合、この機能を備えたサードパーティパッケージはありますか?

それ以外は、コメントやタグなど、関連するテーブルも検索する必要があります。テーブル全体にインデックスを作成することはどのように可能ですか、それとも不可能ですか? MySQLのテーブル全体にインデックスを作成することができない場合、ESでこれを解決できるものはありますか?.

弾性検索に対してMySQL全文検索を使用するときに直面する可能性がある他の長所と短所は何ですか?

12
Rohan

MySQLを使用すると、常にデータのインデックス作成と検索が行われます。

ElasticSearchを使用すると、インデックスを1つの単位としてより柔軟に使用できます。アイテムのすべてのコンテンツコメントとタグを取得し、1つのアイテムとしてESに配置できます。

ESは、一般的にmysqlで得られるよりも優れたパフォーマンスと結果を提供することにも気付くでしょう。また、類義語や重み付けなどの柔軟性も向上します。

しかし、これは、維持する別のスタックがあり、コンテンツのインデックス作成と更新を管理する必要があることを意味します。

したがって、それはデータサイズと機能としての検索の重要性に依存します。

MySqlテキスト検索から始めることをお勧めします。単純なケースの場合、セットアップが迅速であり、必要なものが提供されない場合は、Elastic Searchにアップグレードします。検索要件をさらに絞り込むために使用できる、ストローマン機能が少なくともあります。

8
Jeremy French

ElasticSearchとMySQl-searchの主な違いは、インデックスを介して大量のデータを処理すると、ESがより高速に動作することです。

インデックスには、さらにESフィルターを操作するための既製のデータセットが含まれています。したがって、ESで検索する場合は、MySQLのようにデータベースに直接リクエストする必要はありません。

これが、HighLoadプロジェクトでElasticSearchを使用する主な理由です。

少量のデータの場合、違いは感じられません。

3
Paul Basenko