私はGeoDistanceによってソートするための私のWeb APIプロジェクトでNESTを使用して問題に直面しました。 私が持っている:とElasticsearchのNESTのv.5.0.1ソート
- サーバーElasticsearchのV5.1.1(ワーキング良い)(基本的なCRUDと 検索操作が良い作業している)がインストールNESTのバージョン5.0.1と
- シンプルな.NETのWeb APIアプリケーション
昨日、私は検索/ソートのリクエストでこの例外に私を導いていたが、すべての可能な解決策:
Invalid NEST response built from a unsuccessful low level call on POST: /activities/activity/_search Audit trail of this API call:
[1] BadResponse: Node: http://MY_SERVER_IP:9200/ Took: 00:00:00.3129217 ServerError: ServerError: 400Type: search_phase_execution_exception Reason: "all shards failed" CausedBy: "Type:
illegal_argument_exception Reason:
"failed to find mapper for [geoposition] for geo distance based sort""
OriginalException: System.Net.WebException: The remote server returned an error: (400) Bad Request. at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
Request:
at System.Threading.Tasks.TaskFactory1.FromAsyncCoreLogic(IAsyncResult iar, Func
2 endFunction, Action1 endAction, Task
1 promise, Boolean requiresSynchronization) --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at Elasticsearch.Net.HttpConnection.d__9`1.MoveNext() in C:\Users\russ\source\elasticsearch-net-5.x\src\Elasticsearch.Net\Connection\HttpConnection.cs:line 199force it to be set on the response.>
Response:ConnectionSettings to force it to be set on the response.>
マイモデル:
[ElasticsearchType(IdProperty = nameof(Id), Name = "activity")]
public class Activity
{
[JsonProperty(PropertyName = "id")]
public string Id { get; set; }
[JsonProperty(PropertyName = "title")]
public string Title { get; set; }
[JsonProperty(PropertyName = "description")]
public string Description { get; set; }
[GeoPoint(Name = "geoposition")]
public GeoLocation Geoposition { get; set; }
[Date(Name = "date_published")]
public DateTime DatePublished { get; set; }
}
マイNESTクライアントの初期化:私は私は本当に新しいNESTクライアントでこれを行う方法を取得していないので、二つの異なるマッピングアプローチを試してみました
var settings = new ConnectionSettings(_node)
.DefaultIndex(_defaultIndex)
.MapDefaultTypeIndices(m => m.Add(typeof(Activity), _defaultIndex));
ElasticClient _client = new ElasticClient(settings);
:
_client.Map<Activity>(m => m.AutoMap().Properties(p => p.GeoPoint(geo => geo.Name(n => n.Geoposition))));
_client.Map<Activity>(m => m.Properties(p => p.GeoPoint(geo => geo.Name(n => n.Geoposition))));
私の現在のクエリ(私は上記のエラー与える):elasticsearchサーバーから
var result = await _client.SearchAsync<Activity>(s => s.Index(_defaultIndex)
//I removed search query to analyze only sorting problem
.Sort(
ss =>
ss.Descending(p => p.DatePublished)
.GeoDistance(
g => g
.Field(p => p.Geoposition)
.DistanceType(GeoDistanceType.Plane)
.Unit(DistanceUnit.Kilometers)
.Order(SortOrder.Ascending)
.PinTo(pin))));
マイマッピング応答:
{
"activities": {
"mappings": {
"activity": {
"properties": {
"date_published": {
"type": "date"
},
"description": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"geoposition": {
"properties": {
"lat": {
"type": "float"
},
"lon": {
"type": "float"
}
}
},
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
を誰かがこの問題を解決するために私を助けることができますか?なぜ動作していないのか、なぜマッピングが機能していないのか理解できません。
を初期化した直後には、明示的にマッピングし、マッピングは、インデックス内に作成されていることを確認する必要がありますあなたに何か書類を送る前に、 –
@RussCam、コメントしてくれてありがとう。私が知っている限り、あなたはRussからc:/ users/russの1人だと理解しています:)あなたは正しいです、私は明らかに生産上の問題を防ぐためにインデックスを明示的にマッピングする必要があります。 – Mausic