2

誰かが解決策を持っているかどうかを確認するために投稿しているか、または紺色の検索で使用するためにいくつかのデータをモデリングするためのガイダンスを提供できます。Azure Searchのドキュメントデザイン

問題領域

私は現在、私が検索したいいくつかのデータをモデル化するためにDocumentDBを使用しています。

{ 
_id,       //key - Guid 
name,       //searchable - String 
description,     //searchable - String 
tags: [ "T1", "T2", ...]  //facet - Collection(String) 
locations: [ 
    { 
     coordinate,    //filter - GeoLocation (lat & long) 
     startDateTime,   //filter - DateTimeOffset 
     endDateTime    //filter - DateTimeOffset 
    }, 
    ... 
    ] 
... 
}, 
... 

関係::私は、現時点では "エンティティA" と呼ぶ私の文書は、のようなものに見える タグ0 ... nは、エンティティA &場所0を... nは、エンティティA

平坦化エンティティAとタグの名前、説明、ファセットの簡単なインデックスとクエリを設定すると、うまく動作します。

問題は、インデックスを作成する場所を追加しようとしていることにあります。私が検索したい(自然言語で)効果的なものは、次のとおりです。 特定の用語については、x開始日とy終了日と重複する座標に近いすべてのエンティティを見つけます。

オンラインで見つけられるものから場所は文字列になると機能します。

https://blogs.msdn.microsoft.com/kaevans/2015/03/09/indexing-documentdb-with-azure-seach/ https://docs.microsoft.com/en-us/azure/search/search-howto-index-json-blobs

これはgeodistance、および日付範囲クエリを実行することができるという力を失うようです。

現在の思考

分割エンティティ2つのコレクション

新しいエンティティA文書に文書:

{ 
    _id,       //key - Guid 
    name,       //searchable - String 
    description,     //searchable - String 
    tags: [ "T1", "T2", ...]  //facet - Collection(String) 
    ... 
    }, 

と、複数の場所実体

{ 
    _id, 
    documentId,      //relates to Document._id 
    coordinate, 
    startDate, 
    endDate 
} 

質問:

新しいエンティティAと場所の2つのインデックスを作成し、結果を結合する方がよいでしょうか?

私はこれを実装例の人を知っています、これはhttps://docs.microsoft.com/en-us/azure/search/search-modeling-multitenant-saas-applications

マルチテナント検索 あると思いますか?

長所

  • は、それが2件の検索は、クエリごとにヒットして、結果をマージする(これは理想であってもなくてもよい)が必要となる

短所

  • に動作すると思います。

OR

です完全ので、すでに

{ 
    _id, 
    documentDBId,      //relates to Document._id 
    coordinate, 
    startDate, 
    endDate, 
    name, 
    description, 
    tags: [] 
    ... 
} 

賛否

  • ような何かかなりフラットすなわち、エンティティA及び場所エンティティを "反転" する方が良いはず簡単に索引をつけることができます。
  • 海が1つRCHヒットなしこれらが変更された場合、それは 複数の更新を必要とする名前、説明、タグなどについて

短所

  • をマージします。日付は、複数の開始日と終了日

OR

をまたがる場合

  • は同じ「エンティティA」 ための複数の結果を得るでしょう、別のオプションはありますか?

  • 答えて

    0

    を必要に応じて、おかげで、私はこのための私の主な引数は、ページングで2番目に完全に平坦化または反転オプション

    { 
        _id, 
        documentDBId,      //relates to Document._id 
        coordinate, 
        startDate, 
        endDate, 
        name, 
        description, 
        tags: [] 
        ... 
    } 
    

    方に傾くだろうと明確にうれしいです。 2回の検索があり、1ページに10件の結果を返す場合は、各検索の結果をいくつ表示しますか、さらに重要なのは、2ページの検索をどこから始めるのですか?

    結果のランク付けにも問題がありますが、ページングよりも管理が容易です。

    +2

    特定のクエリに一致する場所/日付の組み合わせの数が比較的少ない限り、ページングが実際に問題になるかどうかはわかりません。すべての一致を取得し、対応する文書IDのリストをまとめ、それを使用してエンティティAインデックスをフィルタリングします。ユーザーに表示するためのページングは​​、エンティティAのインデックスで発生します。 –

    +0

    ああ、そうすることで、最初の検索の結果の数が妥当である限り、ページングを処理できるようになります。 –

    +0

    ありがとう@BruceJohnston。私はそれを打つつもりで、私がどれだけ遠く/問題に遭うかを見ていくつもりです。 –

    関連する問題