Твиты в индексе могут иметь такую структуру (не строгий JSON, просто пытаясь передать структуру :)
{
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
все имеют значение NULL, когда я смотрю на совпадения ответа, например.
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, не являющееся коллекцией?
1 ответ
Вы должны полностью связать их.
Если только вы не укажете свойство .Fields()
в своем .Search()
Что происходит, так это то, что ваш документ будет находиться в _source, если вы не укажете Fields, обращения будут возвращать _source
, если вы укажете поля, он вернет поля в виде массива, т.е.
fields: {
mention.name: ["name1", "name2"]
}
Который в основном представляет собой плоский вид вашего исходного документа _source.
Было бы полезно, если бы вы могли вставить result.ConnectionStatus.Result, чтобы увидеть, как выглядят ваши результаты.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.
mention.name
в запросе вместо простоmention
. Мне также нужно было украсить POCO с помощьюElasticType(Name="whatever")]
, но я заставил его работать..SetPropertyNameInferrer(p=>p.ToPythonCase())
наConnectionSettings
, чтобы глобально указать, как выглядят имена свойств. NEST по умолчанию - имена свойств camelCase. Это помогает избежать необходимости повсюду оштукатурить атрибуты.