2016-11-16 13 views
0

まず、私はそうIDでトランザクションデータベースエンティティを行いAzureの検索インデックスフィールドID名前

どのように甘い:-)してください、専用の検索エンジンの概念は、すべて私に新しいものであることを言いたいと名前は「Azure Search Index」フィールドに変換されますか? Name、またはIdNameの両方を追加する必要がありますか?

たとえば、私のインデックスにクライアントを入れたいとしましょう。 私は、クライアント上でファセットを検索して持ちたいと思っています。

インデックスにはClientNameを追加してください。 ClientNameの名前を変更したらどうなりますか? ClientNameが一意でない場合はどうなりますか?

は私がインデックスに両方のフィールドを追加している必要があります

  • ClientName:検索可能
  • ClientId:Facetable、濾過可能

は、私が(代わりにクライアント名の)ClientIdをFacetableを行います持っ理解しますAzure Searchによって返されたClientIdに対応する名前を自分自身で取得しなければならないので、ファセットを表示する作業が増えます。

また、ClientIdをフィルタリング可能にして、ClientNameのバッチリネームを実行できるとします。

私の推論は大丈夫ですか?

ベストプラクティス/ガイドラインはありますか?ここで

EDIT

は、より具体的な例です。 レッツは、私たちがAzureの検索では、これらのファセットを構築した場合、推奨されるアプローチは次のようになり

...、トランザクションDBに、我々はIdFormatためNameLocationAuthorGenreRegionとテーブルを持っていることを言いますそれぞれにIdNameを追加し、IdフィールドをFacetableに設定しますか? enter image description here

答えて

2

名前が変更される可能性があるため、Idと名前の両方を追加することをお勧めします。また、Nameフィールドには任意の文字を含めることができますが、ドキュメントIDには英数字、ダッシュ、アンダースコア、等号のみを使用できます(Naming Rules参照)。

idフィールドのみが一意である必要があります(リレーショナルデータベースの主キーと同じセマンティクスを持ちます)。他のフィールドはすべて一意でない値を持つことができます。値が変更された場合は、文書を更新するだけです(mergeまたはmergeOrUploadのインデックス作成アクションを使用)。

Azure Searchは、最大1000個のドキュメントのバッチをサポートします。それより多くの文書を更新したい場合は、更新プログラムを複数のバッチに分割する必要があります。 Indexing APIを参照してください。リンクはREST APIを示していますが、.NETの場合は.NET SDKでも同じ機能が利用できます。

私はインデックスに両方のフィールドを追加している必要があります クライアント名:サーチャブル ClientIdを:Facetable、フィルター可能 私は「ので、(代わりにクライアント名の)ClientIdをFacetableを有するファセットを表示することが多くの作業になります理解Azure Searchによって返されたClientIdに対応する名前を自分自身で取得する必要があります。

ClientIdは面倒ではありません。ファセットは、固有値の数が比較的少ないフィールドで最適に機能します。 ClientIdは定義上一意でなければならないので、ファセットは有用ではなく、ClientIdを参照する任意のファセットクエリは、インデックスに多数のドキュメントがある場合にはほとんど機能しません。 ClientIdで特定の文書を検索または除外したい場合があるので、ClientIdをフィルタリングすることは合理的です。

また、ClientId Filterableを使用すると、ClientNameのバッチリネームを実行できるようになります。

これは必須ではありません。 ClientIdをフィルタ可能にすると、ClientIdでフィルタリングすることができます。インデックスAPIを使用してフィールドを更新する際には常にドキュメントIDを指定する必要がありますが、IDフィールドをフィルタリングする必要はありません。

私はこれがあなたを始めてくれることを願っています。より具体的な質問があるので、ここに投稿することができます。

+0

ユージンありがとう、これは間違いなく役立ちます。私はより具体的な例で私の質問を編集しました。なぜなら、名前付け規則についてのあなたの言及についてはわからないからです。私はここで文書キーについて話していません。 –

+2

こんにちはGuillaume、あなたの編集は、階層的ファセットをサポートする必要があるように見えます。これを処理するには本当に良いテクニックがあります。このテクニックは[ここ]で読むことができます(https://blogs.technet.microsoft.com/onsearch/2015/09/09/multi-level-taxonomy-facets-in-紺 - 検索/)。これがあなたのために働かないか、私があなたを誤解した場合は、私たちにお知らせください。 –

+0

いいえ、マルチレベルはありませんが、リンクのおかげで、これは素晴らしいです!私の質問は、実際のデータベースに変更が加えられたとき、例えばProductCategory.Nameの名前が変更されたとき、ProductModel.Nameの名前が変更されたとき、モデルに新しい製品が追加されたとき、 ProductCategoryId、ProductIdなどのIDがインデックスに必要であると想定していますか? –

関連する問題