3

ASP.NET 4.5 C# で Web アプリケーションを構築しています。私のアプリは検索機能に大きく依存します。プロジェクトの高性能な検索ソリューションを探しています。効率的/高速で実装が簡単なものを探しています。

いくつかのソリューションを調べた後、ElasticSearch が優れた検索機能を提供することがわかりました。また、プロジェクトをそこにデプロイすることにした場合、Amazon Web Services によってサポートされています。

ただし、MySQL 5.6 では InnoDB テーブルの全文検索が機能するようになったことを読みました。次のプロジェクトでどちらを使用するかを決定するために、各アプローチの違い、短所、長所を知りたいと思いました。

私の主な目標は、データベースに対して非常に高速な検索を行い、自然言語検索やスコアリングなどの利点を享受できるようにすることです。実際には、検索可能なテキスト フィールドに 100 文字の非常に小さなテキスト フィールドを用意します。

私の質問の要約:

  1. MySQL 5.6 全文検索と ElasticSearch の基本的な違いは何ですか? (長所と短所)
  2. MySQL Full Text Search では、検索インデックス/機能をデータベースから分離する必要がありますか (たとえば、ElasticSearch では、別のサーバーにデプロイできる ELasticSearch サーバーを使用しています。MySQL Full でも同じように機能するのでしょうか?テキスト検索も?
  3. 実装しやすいのはどっち?
  4. ASP.NET プロジェクトでいずれかを使用する利点はありますか (サポートされているクライアント ライブラリなど)。

ありがとう。

4

1 に答える 1

13

私は MySQL 5.6 の全文検索機能にあまり詳しくありませんが、ASP.NET Web アプリで ElasticSearch を使用しています。

  1. MySQL は SQL でクエリされ、ES は RESTful であるため JSON でクエリされます

  2. MySQL はデータベース管理システムそのものですが、ElasticSearch は単なる検索エンジンです。検索が実行されるデータは、そのインデックスに格納されます (ElasticSearch データ ストアはインデックスと呼ばれます)。このインデックスは時々失敗するのが好きで、データを外部データベースにバックアップする必要があります (私は NoSQL ソリューションを使用しています - 私は BigData の問題に苦しんでいるため、MongoDB を使用しています)、そこから復元します。

  3. ElasticSearch は分散システムです。シャードを使用します-検索を実行すると、インデックスはいくつかのシャードに分割され、個別のスレッドによって個別に検索されます。次に、検索結果が 1 つのセットに統合されます。スコアリングは、検索が実行されるレコードの数に基づいて何らかの方法で計算されるため、同じレコードでも、それがどのシャードであったか、およびこのシャードに割り当てられたレコードの数によって異なる場合があります (ただし、検索クエリ オプションで構成可能です)。 - DFSThenFetch を参照)

  4. ES は、NEST ライブラリを使用して C# コードから操作できます。これにより、ES エンティティを C# クラスにマップし、LINQ、ラムダ構文 (述語よりも多くの式を使用) によってそれらをクエリできます。

  5. エンティティに多くのフィールドがある場合、ElasticSearch のクエリは非常に困難になる可能性があります。私の場合、ElasticSearch で検索クエリを実行するには非常に多くの方法があるため、かなり複雑なクエリ ビルダーを実装する必要がありました。http://www.elasticsearch.org/guide/reference/query-dsl/ を参照してくださいNEST ライブラリに実装されています)。たとえば、データをフィルタリングするのではなく、一致する文字列に対してかなり異なる方法でクエリを実行します。GreaterThan または LessOEqual。

  6. ES では、レーベンシュタイン距離に基づくあいまい一致を利用できます。これは、タイプミスに苦しんでいるときに非常に便利です。

  7. ElasticSearch は非常に高速です。MS SQL Server が (単純なクエリで) 1 分以上データを検索したのに対し、ES は (非常に複雑なクエリを使用しても) 20 ミリ秒未満で検索を実行します。Lucene 検索エンジンの分散実装です。

私の投稿があなたの質問に対する直接的な回答ではないことは承知していますが、ElasticSearch に関する情報を提供し、何らかの形で役立つことを願っています。乾杯。

于 2013-08-15T09:27:33.360 に答える