2016-08-19 84 views
1

我在嘗試索引存儲在DocumentDb集合中的文檔時遇到問題。Azure搜索索引器無法從DocumentDB中的文檔檢索GeographyPoint文件夾

索引器的數據源是使用自定義SQL定義的,以檢索已更改的文檔。我要索引的文檔有一個名爲LocationGP的屬性,它是Microsoft.Spatial.GeographyPoint,映射到同名索引字段並定義爲DataType.GeographyPoint

嘗試創建索引是:

列「LocationGP」的類型爲J Object中不符合型Edm.GeographyPoint的索引

任何想法領域兼容?

這是數據源的定義:

return new DataSource() 
       { 
        Name = "opportunities-datasource", 
        Container = new DataContainer() 
        { 
         Name = "Companies", 
         Query = @"SELECT o.id, 
              o.CompanyName, 
              o.LocationGP, 
              o.Location.CityName AS LocationCity, 
              o.Location.StateName AS LocationState, 
              o.Location.CountryName AS LocationCountry, 
              o._ts 
           FROM Companies o WHERE o.DocType = 1 AND o._ts > @HighWaterMark" 
        }, 
        Type = "documentdb", 
        Credentials = new DataSourceCredentials() 
        { 
         ConnectionString = String.Format("AccountEndpoint={0};AccountKey={1};Database=CompaniesDb", DocumentDbEndpointUri, DocumentDbPrimaryKey) 
        }, 
        DataChangeDetectionPolicy = new HighWaterMarkChangeDetectionPolicy("_ts"), 
        DataDeletionDetectionPolicy = new SoftDeleteColumnDeletionDetectionPolicy("Status", "2") 
       }; 

這是文檔:

[{ 
    "id": "088e1e97-6d59-40ad-a9be-620fdc7938c7", 
    "CompanyName": "Neptune", 
    "LocationGP": { 
     "Latitude": 39.8010482788086, 
     "Longitude": -89.6436004638672, 
     "IsEmpty": false, 
     "Z": null, 
     "M": null, 
     "CoordinateSystem": { 
     "EpsgId": 4326, 
     "Id": "4326", 
     "Name": "WGS84" 
     } 
    }, 
    "Location": { 
     "CityName": "Springfield", 
     "CountryName": "US", 
     "StateName": "IL" 
    }, 
    "Status": 1, 
    "DocType": 1, 
    "Timestamp": "2016-08-19T16:08:46.0481948Z", 
    "_ts": 1471622922 
    }] 

回答

0

問題是Edm.GeographyPoint具有比Microsoft.Spatial.GeographyPoint不同的格式。

爲了使它工作,我只是創建了一個名爲EdmGeograpyPoint這樣的類:

public class EdmGeographyPoint 
{ 
    public EdmGeographyPoint(double longitude, double latitude) 
    { 
     coordinates = new double[] { longitude, latitude }; 
     type = "Point"; 
    } 

    public string type { get; private set; } 
    public double[] coordinates { get; private set; } 
} 

然後我更換了LocationGP屬性EdmLocation的類型。

也許有更好的解決方案,但文件是圍繞這個話題困惑: https://azure.microsoft.com/en-us/documentation/articles/search-howto-dotnet-sdk/

+1

您引用的文檔討論了Azure Search .NET SDK。使用Microsoft.Spatial.GeographyPoint的示例是使用索引API將文檔推入索引的示例。 SDK具有專門的序列化邏輯,將GeographyPoint轉換爲Geo-JSON(又名:Edm.GeographyPoint)。 –