2016-08-19 3 views
1

DocumentDbコレクションに格納されているドキュメントのインデックスを作成しようとしているときに問題が発生しています。Azure Search IndexerがDocumentDBのドキュメントからGeographyPointファイルを取得できません。

変更されたドキュメントを取得するために、カスタムSQLを使用してインデクサーのデータソースを定義しました。インデックス化するドキュメントにはLocationGPというMicrosoft.Spatial.GeographyPointというプロパティがあり、同じ名前のインデックスのフィールドにマップされ、DataType.GeographyPointと定義されています。

インデクサーは、次のとおりです。

列「LocationGP」インデックス内のタイプEdm.GeographyPointの分野

任意のアイデアと互換性がありませんJOBJECT型のでしょうか?

これは、データソースの定義です:

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.GeographyPointMicrosoft.Spatial.GeographyPointとは異なる形式を持っているということでした。

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; } 
} 

は、その後、私はEdmLocationにLocationGPプロパティの種類を置き換える:

それを動作させるために、私はちょうどこのようEdmGeograpyPointというクラスを作成しました。

はたぶんよりよい解決策がありますが、ドキュメントは、このトピックの周りに混乱している: 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(a.k.a. Edm.GeographyPoint)に変換する特別なシリアル化ロジックがあります。 –

関連する問題