2017-09-26 59 views
1

我在指數以下數據的數組,如何過濾Azure中搜索

{ 
"name" : "The 100", 
"lists" : [ 
       "2c8540ee-85df-4f1a-b35f-00124e1d3c4a;Bellamy", 
       "2c8540ee-85df-4f1a-b35f-00155c40f11c;Pike", 
       "2c8540ee-85df-4f1a-b35f-00155c02e581;Clark" 
      ] 

} 

我必須得到所有在列表中有派克在它的文件。

儘管完整的搜索查詢適用於任何我無法獲取包含的工作。

$filter=lists/any(t: t eq '2c8540ee-85df-4f1a-b35f-00155c40f11c;Pike') 

但是我不知道如何與派克只搜索。

$filter=lists/any(t: t eq 'Pike')

我猜EQ查找全文搜索,有沒有辦法用給定的數據結構,我應該讓這個查詢工作。

當前字段列表沒有可搜索的屬性只有可過濾的屬性。

回答

2

eq運算符會查找確切的區分大小寫的匹配項。這就是爲什麼它不符合'Pike'。您需要構建您的索引,以便可以輕鬆找到像「派克」這樣的術語。您可以通過以下兩種方法之一完成此操作:

  1. 當您索引文檔時,將GUID與名稱分開。因此,如果您需要按位置關聯它們,而不是將"2c8540ee-85df-4f1a-b35f-00155c40f11c;Pike"索引爲單個字符串,則可以將它們索引爲同一數組中的單獨字符串,也可以將它們索引爲兩個不同的集合字段(一個用於GUID,一個用於名稱)。
  2. 如果該字段爲searchable,則可以在過濾器中使用new search.ismatch function。假設該字段使用的是標準分析器,則全文搜索將在分號上爲word-break,因此您應該能夠搜索「派克」並獲得匹配。語法如下所示:$filter=search.ismatch('Pike', 'lists')(如果查找「Pike」是您的所有過濾器,則可以將searchsearchFields參數用於Search API而不是$filter。)如果「lists」字段尚不可搜索,您需要添加一個新字段並重新索引「列表」值,或者使用新字段定義從頭開始重新創建索引。
+0

謝謝我將該字段設置爲可搜索並使用$ filter ...第一種方法在應用程序代碼中有很多殘留效應。謝謝 – TBA