0
推文在一个索引可以有这样的(不严格JSON的结构,只是想传达的结构:)我可以将POCO绑定到Elasticsearch命中以获得更强的输入吗?
{
text: string
created_at: DateTime
mention: [
{
name: string
screen_name: string
start: int
end: int
}
],
hashtag: [
// multiple string/int props similar to mention
],
link: [
// multiple string/int props similar to mention
],
user: {
name: string
screen_name: string
profile_image_url: string
}
}
使用NEST客户端时,我得到预期的命中率,但我下的印象我可以映射POCO的结果来获得更强的类型,例如
public class TweetDocument
{
public string text { get; set; }
public DateTime created_at { get; set; }
public List<Mention> mention { get; set; }
public List<Hashtag> hashtag { get; set; }
public List<Link> link { get; set; }
public User user { get; set; }
}
public class Mention
{
public string name { get; set; }
public string screen_name { get; set; }
public int start { get; set; }
public int end { get; set; }
}
// ... other POCO's for Hashtag, Link and User
字符串属性text
和DateTime财产created_at
绑定好了,但mention
,hashtag
和link
性质均为空,当我在响应的命中例如看
var response = client.Search<TweetDocument>(q);
var firstHit = response.Hits.Hits.FirstOrDefault();
// firstHit.Fields.hashtag, .mention, .link and .user are all null
我已经看到了一些属性,但还没有真正想出如何使用它们,例如, ElasticProperty
和ElasticType
。 如何从我的索引中填充这些集合,包括非集合.User子属性?
我指定了不正确的字段,例如查询中的“提及。名称”而不是“提及”。我还需要用ElasticType(Name =“whatever”)]来装饰POCO,但我确实得到了它的工作。 –
你可以在ConnectionSettings上使用'.SetPropertyNameInferrer(p => p.ToPythonCase())'来全局指定属性名称的外观。默认情况下为NEST camelCase的属性名称。这有助于防止需要在任何地方抹灰。 –