2017-01-27 12 views
1

私は自分のlaravelアプリケーションで検索機能を実装しようとしています。アンゴラは、データのセキュリティ上の問題のために私の上司から好まれていません。それ以外の良い選択肢は、弾性検索を実装することと、もう1つはmysqlの全文検索を使用することです。私は賛否両論が何であるか分かりませんが、いくつかの場所で弾力的な検索がより良い選択肢になるはずですが、これまでに検索していないので、私が働いていることを理解したいと思います。エラスティック検索の全文とmysqlの全文?

私はMySQLの要件を見ていて、InnoDbエンジンで5.6以上でしか実装できないようです。それ以外の場合は、char型とtext型フィールドの全文索引のみを実装できます。私は、エラスティック検索でどのようなフィールドが許可されているのかよく分かりません。

私は私のようなものを持って知っている。そして、私はのような何かを推測する

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

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

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

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

私は弾性検索に対するMySQLフルテキスト検索を使用して、他の賛否両論はありますか?

+0

@jeremyが正しいです。複雑な検索機能を持たない限り、新しいスタックを作成するのを避けるためにmysqlを使うことができます。検索ユースケースのいくつかの例を分かち合うことができれば、より多くのことができます。 – user3775217

答えて

2

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

ElasticSearchを使用すると、1つのユニットとしてインデックスを作成する際の柔軟性が向上します。あなたは、アイテムのすべてのコンテンツコメントとタグを1つのアイテムとしてESに入れることができます。

また、ESが優れたパフォーマンスを発揮し、一般的にmysqlで得られる結果が優れていることがわかります。同義語や重み付けなどの柔軟性もあります。

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

したがって、データサイズと検索機能の重要性によって異なります。

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

2

MySQl検索の主な相違点ElasticSearchは、大量のデータがインデックス付けされるとESが高速に動作することです。

インデックスには、さらにESフィルタを操作する既製のデータセットが含まれています。したがって、ESで検索する場合は、MySQLの場合と同様に、データベースへの直接のリクエストはしないでください。

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

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

-1

ESでは、1つのAPI(_termvectors)でTF-IDFを取得できます。私の知る限り、MySQLにはその機能はありませんが、データベースに何度もクエリを実行することで実装できます。