2016-07-24 19 views
0

Ich möchte in C# programmatisch die Feldzuordnungen zwischen einem JSON-Objekt und dem Azure Search-Index definieren. Ich habe die Erklärung dafür gefunden, wie dies hier in Javascript tun https://azure.microsoft.com/en-us/documentation/articles/search-howto-index-json-blobs/AzureSearch-Indexfeldeinträge in C# -Code definieren

"fieldMappings" : [ 
{ "sourceFieldName" : "/article/text", "targetFieldName" : "text" }, 
{ "sourceFieldName" : "/article/datePublished", "targetFieldName" : "date" }, 
{ "sourceFieldName" : "/article/tags", "targetFieldName" : "tags" } 
] 

aber ich C# entsprechenden Code benötigen. Ich habe bisher versucht:

 var index = new 
     { 
      name = "testindex", 
      fields = new [] 
      { 
       //... 
      }, 
      fieldMappings = new[] 
      { 
       new { sourceFieldName = "/status/text", targetFieldName = "text"} 
      } 
     } 

aber dieser Code stürzt mit Ausnahme

{"Azure Search request failed:{\"error\":{\"code\":\"\",\"message\":\"The request is invalid. Details: index : The property 'fieldMappings' does not exist on type 'Microsoft.Azure.Search.V2015_02_28.IndexDefinition'. Make sure to only use property names that are defined by the type.\\r\\n\"}}"} 

Vorschläge, wie ich in C programmatisch können diese Feldzuordnungen # -Code definieren? Sollen diese fieldMappings innerhalb des Indexers der Indexdefinition definiert werden? Vielen Dank!

@LaterEdit: Von diesem Artikel Creating Collection in Azure Search Service using Indexer Ich fand, dass diese Zuordnungen auf dem Indexer definiert werden müssen, aber es ist immer noch der Fall, dass wenn ich sie beim Definieren des Indexers die Eigenschaft fieldMappings nicht vorhanden ist.

var indexer = new 
    { 
     name = "textixr", 
     dataSourceName = "testsdocdb", 
     schedule = new { interval = "PT5M" }, // every 5 minutes 
     targetIndexName = "test", 
     fieldMappings = new [] 
     { 
      new { sourceFieldName = "/status/text", targetFieldName = "text" } 
     } 
    }; 

Antwort

2

Sie benötigen api-Version 2015-02-28- Vorschau zu verwenden. Feldzuordnungen sind in 2015-02-28 nicht verfügbar.

Übrigens können Feldzuordnungen mit JSON-Zeigern (wie /status/text) nur verwendet werden, wenn JSON-Blobs mit Blob-Indexer indiziert werden. Sie können nicht mit dem DocumentDB-Indexer verwendet werden. Um geschachtelte Eigenschaften mit DocumentDB zu projizieren, verwenden Sie eine SQL-ähnliche Abfrage in der container.query-Eigenschaft der Datenquellendefinition. Weitere Informationen zum DocumentDB-Indexer finden Sie unter this article

+0

Vielen Dank für die Antwort. 2015-02-28-Vorschau gibt den Fehler nicht. Ich bin mir jedoch nicht sicher, wie eine Sql-ähnliche Abfrage in der container.query-Eigenschaft verwendet werden soll. Könnten Sie mir vielleicht ein Beispiel geben oder auf einen Artikel hinweisen, in dem dies erwähnt wird? – Crista23

+1

Sie müssen eine SQL-Abfrage verwenden, wenn Sie die Datenquelle definieren, um Ihre Dokumente zu reduzieren, etwa SELECT c.id, c._ts, ** c.status.text AS-Text ** FROM Collection c WHERE c._ts> = @HighWaterMark . Der Artikel, mit dem ich verlinkt habe, hat Beispiele. –

+0

Danke! Ich erstelle derzeit die DocumentDb-Datenbank, den AzureSearch-Indexer und den Indexer programmatisch in C#. Gibt es eine Möglichkeit, diese Syntax in C# aufzurufen? – Crista23