0

この問題を解決する可能性のある検索方法に関するいくつかの提案を求めて、この質問を「より優れた創造性」に投げかけています。いくつかの解決策が推奨されるように、問題を十分に説明するために、やや不自然な例を考え出しました。

問題: リレーショナル DB (MSSQL) を使用しており、次の制約がある製品全体を検索する必要があります。

  • 可用性
  • 市場
  • 価格

また、グループ化して並べ替える必要があります - 価格 - 市場 - より大きなエンティティのロールアップ

半現実世界のエンティティを使用して説明できるかどうか見てみましょう。

ユーザーが予約可能なホテルの部屋を検索できるアプリケーションを考えてみてください。検索には、次の基準を使用できます。 - 部屋が予約される日 - ホテルの部屋を希望する市場 (NYC、ボストンなど) - ホテルの部屋に備わっている可能性のあるアメニティ (ホット)バスタブ、暖炉 - ベッド数 - スイートかどうか

いずれの場合も、上記の検索基準が選択される場合と選択されない場合があります。そのため、非常に幅広い検索 (これらの日付では、どの市場でも構いません) またはさまざまなレベルの特異性 (NYC、2 ベッド、暖炉付き) が可能です。

複雑さを増すために、選択した条件のホテルの部屋の価格も返す必要があります。明らかに、特別価格、滞在日ごとに異なる価格 (木曜日の夜には 1 つの価格、週末の滞在には金曜と土曜の夜には別の価格)。

- Solr - Endeca - SQL クエリ - C# コードで実装し、必要に応じて最適化する (Decorator パターンを考える)

ここで私が探しているのは、コミュニティからのいくつかの提案です - 上記のうち、この問題に適していないのはどれですか - この問題に適しているのはどれですか - 私たちが考えていなかった他のどのテクノロジーがよりうまく機能する可能性がありますか - テクニック他の人がうまく機能した同様の問題で使用したもの(技術固有ではない)

アイデアや提案があれば、事前に感謝します。私はこの質問に適切なタグを適用しようとしていますが、オープンであり、適切な頭脳を得るために追加/削除することができます.

4

1 に答える 1

1

あなたが説明していることは、属性を持つエンティティに要約されます。私の場合、製品と属性が何でもかまいません (例: カテゴリ、状態、価格、色など)。製品は属性を共有する必要はありませんでしたが、共通のセットがありました。

最終的にたどり着いた解決策は、lucene (私の場合は .net) を使用することでした。ただし、フィルタリング機能を使用する方が簡単なため、Solr を使用することをお勧めします (Solr を使用できない特定の理由がありましたが、おそらくそれが最も簡単な解決策です...ただし、起動して実行するのは非常に簡単でした) Lucene.net)。基本的な考え方は、属性をプロパティとしてドキュメントを作成することです。次に、検索コードに渡すことができるオブジェクトを設計します。このオブジェクトは、ユーザーがフィルター処理する値で検索している属性を一覧表示します。その後、そのオブジェクトを使用して、必要なドキュメントを取得するクエリを Lucene で作成するのは非常に簡単です。

ページングが必要な場合、実装するのは比較的簡単です。Solr で見つけた利点の 1 つは、属性のグループを簡単にカウントできることでした (たとえば、「Nikon」を検索して、「Nikon」を含むすべてのドキュメントを返すだけでなく、さまざまなカテゴリや属性などの属性をグループ化できます)。さまざまな色....Luceneでこれを行うことができますが、より多くの作業が必要です)。

さまざまな検索オプションを検討した結果、SQL Server の検索機能を使用して機能を実装するのにかなりの時間を費やした後、Lucene に落ち着きましたが、Lucene の方が高速であり、DB サーバーの負荷が少ないように見えます (また、Stack OverFlow 自体を収集します)。 SQL Server の検索の使用から Lucene に移動しました)スタック オーバーフロー検索

于 2012-01-05T19:58:02.403 に答える