0

現在、複雑な URL 処理の概念に関する質問に苦労しています。アプリケーションには、さまざまな製品タイプ (カテゴリ、色、メーカー、素材など) をすべて含む製品プロパティ データベース テーブル/コレクションがあります。

{_id:1,alias:"mercedes-benz",type:"brand"},
{_id:2,alias:"suv-cars",type:"category"},
{_id:3,alias:"cars",type:"category"},
{_‌​id:4,alias:"toyota",type:"manufacturer"},
{_id:5,alias:"red",type:"color"},
{_id:6,alias:"yellow",type:"color"},
{_id:7,alias:"bmw",type:"manufacturer"},
{_id:8,alias:"leather",type:"material"}
...

ここでの使命は、含まれている製品プロパティを取得するために、可能なすべての (!) 順序で以下のスタイルで URL 要求を処理することです。許可されている唯一の文字はダッシュです (SEO の要件が定められています。一部のプロパティにはダッシュを単独で含めることもできます。これも重要な点だと思います。つまり、カテゴリ「suv-cars」またはメーカー「mercedes-benz」):

http:\\www.example.com\{category}-{color}-{manufacturer}-{material}
http:\\www.example.com\{color}-{manufacturer}
http:\\www.example.com\{color}-{category}-{material}-{manufacturer}
http:\\www.example.com\{category}-{color}-nonexistingproperty-{manufacturer}
http:\\www.example.com\{color}-{category}-{manufacturer}
http:\\www.example.com\{manufacturer}
http:\\www.example.com\{manufacturer}-{category}-{color}-{material}
http:\\www.example.com\{category}
http:\\www.example.com\{manufacturer}-nonexistingproperty-{category}-{color}-{material}
http:\\www.example.com\{color}-crap-{manufacturer}
...

...そう:プロパティのすべての順序を許可する必要があります! 結果は、UR​​L リクエストごとに使用されるプロパティに関する情報でなければなりません (ところで、重複したコンテンツはリダイレクトと定義済みのスキーマによって修正されます)。「存在しないプロパティ」/「がらくた」が発生する可能性があり、無視する必要があります。

アップデート:

アイデア1:質問について私が考えている1つの方法は、クエリ文字列をダッシュ​​で分割し、値ごとに分析することです。問題:いくつかのプロパティで2つまたは3つ以上の単語の組み合わせで、さまざまな組み合わせとバリエーションが多すぎますだから、このアイデアを殺すたくさんのクエリがあると思います..

アイデア 2:もう 1 つの方法は、(私の意見では) 大きすぎるエイリアス/URL テーブルをさまざまな組み合わせで構築することですが、それは醜い回避策だと思います。さまざまなプロパティが約 15.000 あるため、さまざまな並べ替え順序のエイリアスの数がこの考えを台無しにしています。

アイデア 3:あなたの番です。あなたの心とあなたの時間をありがとう。

4

2 に答える 2

0

あなたの質問は少し広いですが、以下はいくつかのアイデアです。希望どおりに機能する無料または商用のエンジンを見つけない限り、すばらしい答えは1つもありません。

私があなたの問題について考えた方法は、URLをキーワードのリストと見なすことでした。

  • Luceneをキーワード/タグシステムとして使用します。フレーズや語幹など、希望する検索の種類に 適しています。
  • 選択したDBにデータを保存してインデックスを作成しますが、キーワードをメモリにプルし、すべてのキーワードとアイテムのビットインデックスを作成します。キーワードテーブルを反復処理して、重み付けされた結果を生成します。キーワードの順序が重要な場合は、語順に基づいて重みを付けるために結果セットをパススルーする必要もあります。これらのタイプの検索では、結果をすばやく返すために、常に結果セットをすばやく制限する必要があります。
  • 動作中の一致から狂ったように結果をキャッシュし、ユーザーが特定のURLで最もクリックしているように見える結果を優先します。
  • MongoDBのタグインデックスを使用してデータベースを攻撃します。結果をマージして重み付けする必要があります。非常に集中的であり、DBリソースを適切に使用していない可能性があります。
  • キーワード検索に関する学術論文のいくつかを読んでください。それは人気のあるトピックです。
  • ダッシュを含む単語のテーブルを作成し、クエリを実行する前にそれらを正規化/変換します
  • 常に最初に完全に完全に一致するかどうかを確認してください
于 2013-01-25T12:19:48.360 に答える
0

すべてのプロパティ値を一意に制限する場合、これが機能する唯一の方法です。したがって、カテゴリ+色+メーカーなどのセットを作成します。すべての値は一意でなければなりません。これにより、値が属するプロパティを見つけることができます。このためのデータ構造は非常に単純です。

{_id:ValueOfTheProperty, Property:TypeOfProperty}

考えられるサンプルを次に示します。

{ _id: Red, Property: Color }
{ _id: Green, Property: Color }
{ _id: Boots, Property: Category }
{ _id: Shoes, Property: Category }
...

このように、順序は問題ではなく、1 つのパスでそれらをマップに変換できます。

{ Color: Red, Category: Boots }

ただし、あいまいな名前にはいくつかの問題があると予測しています。

于 2013-01-25T10:27:43.697 に答える