2016-05-25 13 views
0

私たちは、要件に適した検索エンジンを見つけるための提案に取り組んでいます。データ構造について説明しましょう。階層データ構造です。基本的には、以下のようなツリーの中に商品の詳細が配置されています。階層ツリーの検索エンジン

階層構造

ベーカリー

       パン

               ビスケット

               パンが

               バン&ロールス

コーヒーショップ

スティック        Rolyalty

                Bevarage

                Pakaged食品

上記ツリー構造のために来るの検索要件があります。私たちはさまざまなツールを探求しています。

私たちはmysqlデータベースでネストセットモデルを試しました。したがって、上記のツリーは、左と右の位置を持つネスト集合モデルとして構築されています。同時リクエスト数が増えてスケーラビリティが考慮されるので、リクエストをより速く処理するインメモリ/検索エンジンの点でより多くのユーザーが移動しました。

私たちはluceneをベースにしたApache Solrの開発を始めました。 solrは、階層ノード検索ではなく、フラット構造検索に適していることを理解しています。しかし、私たちは、ツリーをフラットな構造として作成しようとしましたが、私たちは以下の合併症で終わりました。

フラット構造
L1           L2         L3
ベーカリー     パン     ビスケット
ベーカリー     パン     パンスティックS
ベーカリー     パン平坦で     パン&ロール
コーヒーショップ      Rolyalty       Bevarage
コーヒーショップ      Rolyalty       Pakagedフード

号構造 我々はSolrの中で、この構造を作成し、私たちは「ベーカリー」で、すべてのレベルにわたって検索を行う一方で、我々は3つのレコード以下

ベーカリー に   パン     ビスケット
ベーカリー     を得ることに終わりますパン     パン
ベーカリー     パン     ブンスティックロールス

当社の要件 当社の要件は一致ノードとその親を送信することです。相互参照を使用している間、1つのノードだけがベーカリーである必要があります。

このケースでは、膨大な量のレコードが存在する可能性があります。右のオプションです。

あなたは上記の検索にアプローチするための良いオプションをお勧めしますか?理想的にはレスポンスもツリーでなければなりません...ツリーを永続化するようなものでしょうか?ノードに基づいて検索し、その親Neo4jを取得することができますか?むしろ検索結果を処理しています。そこに、Solrの6からスタート

https://docs.mongodb.com/manual/applications/data-models-tree-structures/

答えて

1

私はこのMongoDBの公式文書は、あなたの使用パターンに基づいて選択する必要があなたの答えを持っていると思うだろうbasic graph traversalのサポートです。これにより、フラットドキュメントを検索可能に構造化し、結果に親が含まれるようにグラフをトラバースすることができます。

+1

おかげさまでティラミス。これを見ていた。検索にはより複雑な要件があるため、検索エンジンが提供する検索機能を活用したいと考えています。 – Raju

1

:データの容量は約2000万

+0

ありがとうアレクサンドル。私はこれが助けると思う。構造を垂直に定義し、親の参照を持たなければならないかもしれません。 例我々は パンが – Raju

+0

スティック       親 ベーカリー パンがadjancyモデルがここで定義され、この ノードのような構造を持っている場合 - http://mikehillyer.com/articles/managing-hierarchical-data-in -mysql/ 私の理解が間違っている場合はplsを返してください – Raju

+0

したがって、この隣接モデルを使用してデータを構造化すると、私は信じているsolrとグラフクエリパーサを使用できます – Raju