2016-11-16 58 views
0

首先我想說的是,一個專門的搜索引擎的概念是所有新的給我,所以請放縱:-)Azure的搜索索引字段標識的名稱

如何與一個ID的事務數據庫實體,名稱會轉換爲Azure搜索索引字段? 我們應該只添加Name,或兩者IdName

例如,讓我們說,我想在我的索引客戶端。 我希望同時在客戶端上搜索並具有方面。

我應該只添加ClientName入索引? 如果ClientName重新更新怎麼辦? 如果ClientName不是唯一的呢?

我應該添加兩個字段到索引,並有:

  • ClientName:檢索
  • ClientId:Facetable,可篩選

我明白有客戶端Id Facetable(而不是客戶端名)將它更多的工作來顯示方面,因爲我必須自己獲取與Azure搜索返回的ClientId相對應的名稱。

而且,具有ClientId過濾的,我相信它會允許我執行ClientName一個批量重命名。

是我的推理好嗎?

是否有任何的最佳做法/準則?

EDIT

下面是一個更具體的例子。 讓說,在交易數據庫,我們用表格和IdNameFormatLocationAuthorGenreRegion,...

如果我們要建立在Azure中搜索這些方面,將建議的方法是同時添加爲他們每個人的IdName,並設置Id字段Facetable? enter image description here

回答

2

這可能是一個好主意,同時添加ID和名稱,因爲潛在的名稱可以更改。此外,名稱字段可以包含任意字符,而文檔ID只能包含字母數字字符,破折號,下劃線和等號(請參見Naming Rules)。

只有id字段必須是唯一的(它有相同的語義在關係數據庫中的主鍵)。所有其他字段可以有不唯一的值。如果值的變化,你只要更新文檔(使用mergemergeOrUpload索引操作)。

Azure的搜索支持多達1000個文件的批次。如果你想更新更多的文件,你必須將你的更新分成多個批次。見Indexing API。這些鏈接顯示了REST API,但是如果您使用.NET,則當然可以在.NET SDK中使用相同的功能。

我應該添加兩個字段到索引,並有: CMDCMDLINE:檢索 客戶端Id:Facetable,可篩選 我明白有客戶端Id Facetable(而不是客戶端名)將使更多的工作,以顯示方面,因爲我」必須自己提取與Azure搜索返回的ClientId相對應的名稱。

我們不建議做ClientId facetable。 Facets在具有相對較少數量的唯一值的字段上工作得最好。由於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到索引? –