Это прекрасно работает:
var rawQuery = @"
{
""query_string"": {
""query"": ""hello world""
,""default_operator"": ""AND""
}
}
";
var searchResponse = client.Search<Doc>(new SearchRequest
{
Query = new RawQuery(rawQuery), Size = 1000
});
К сожалению, ни одно поле POCO Do c не заполнено, кроме Id. Любые идеи, почему это?
PS:
Более (упрощенные) детали в соответствии с просьбой
public class Doc
{
public string Id { get; set; }
public string FileName { get; set; }
public string FileExtension { get; set; }
public string Content { get; set; }
public Attachment Attachment { get; set; }
}
public static void CreateIndex(ElasticClient client, string indexName)
{
var createIndexResponse = client.Indices.Create(indexName, c => c
.Settings(s => s
.Analysis(a => a
.Analyzers(ad => ad
.Custom("windows_path_hierarchy_analyzer", ca => ca
.Tokenizer("windows_path_hierarchy_tokenizer")
)
)
.Tokenizers(t => t
.PathHierarchy("windows_path_hierarchy_tokenizer", ph => ph
.Delimiter('\\')
)
)
)
)
.Map<Doc>(mp => mp
.AutoMap()
.Properties(ps => ps
.Text(s => s
.Name(n => n.Id)
.Analyzer("windows_path_hierarchy_analyzer")
)
.Object<Attachment>(a => a
.Name(n => n.Attachment)
.AutoMap()
)
)
)
);
var putPipelineResponse = client.Ingest.PutPipeline("attachments", p => p
.Description("Document attachment pipeline")
.Processors(pr => pr
.Attachment<Doc>(a => a
.Field(f => f.Content)
.TargetField(f => f.Attachment)
)
.Remove<Doc>(r => r
.Field(ff => ff
.Field(f => f.Content)
)
)
)
);
}
PPS:
Итак, я использовал:
http:/SomeWhere:9200/amazingindex/_search?pretty=true
и поля называются, например, fileName fileExtension. Поэтому я создал POCO, используя эти имена / заглавные буквы. Тем не менее поля не заполняются отдельно от идентификатора и вложения гнезда. Я думаю, мне нужно отойти от NEST, чтобы отправлять необработанные запросы и заполнять POCO.