0

次の階層の例があると仮定します。

  • 私たち
    • ミシガン
      • デトロイト
      • グランドラピッズ
      • ランシング
    • ミネソタ
      • グランドラピッズ
      • ミネアポリス
      • セントポール
    • オハイオ
      • コロンバス
      • グランドラピッズ
      • サンダスキー

「ミシガン州グランドラピッズ」のドキュメントに接頭辞付きの用語を付けてインデックスを作成する方法は2つあります。

XFIRSTLEVELus
XSECONDLEVELmichigan
XTHIRDLEVELgrandrapids

また

XFIRSTLEVELus
XSECONDLEVELus_michigan
XTHIRDLEVELus_michigan_grandrapids

より直感的な結果が返されると考えて、2番目のアプローチを使用する傾向があります。つまり、ミシガン州グランドラピッズの検索条件を含む検索には、ミネソタ州とオハイオ州のドキュメントが含まれる可能性が低くなります。

ただし、このアプローチの2つの側面が気になります。まず、階層の各レベルの用語プレフィックスの作成と保守が間違っていると感じます。第二に、値の連結は、重みを使用するための代理のように見えます。

では、用語の接頭辞を使用して階層を表すための最良の方法は何ですか?

4

1 に答える 1

1

これらすべてのことと同様に、データを保存する「最良の」方法ではなく、データをどのように使用するかを考えるのが最善かもしれません。

以前は、URLパスであるかのように位置データを保存し、地名をスラッグに変換していたため、上記の例は次のようになります。

us
us/michigan
us/michigan/detroit
us/michigan/grand-rapids
us/michigan/lansing
us/minnesota
us/minnesota/grand-rapids
us/minnesota/minneapolis
us/minnesota/st-paul
us/ohio
us/ohio/columbus
us/ohio/grand-rapids
us/ohio/sandusky

各ドキュメントにこれらのパスのいずれかを接頭辞として付け、正確な用語検索を使用して場所内のすべてのドキュメントのみを取得するlocation:us/minnesota/minneapolisか()、ワイルドカード検索を使用して場所のすべての子を取得します(location:us/minnesota/*

これは「最良の」解決策である場合とそうでない場合がありますが、一部のアプリケーションでは機能する可能性があります:)

于 2011-11-06T21:31:08.137 に答える