Теперь я изучаю клиент Nest 6.x для elasticsearch. Я хочу использовать поиск по терминам в поддокументах. У меня есть эти классы:
public class BaseTest
{
public string Id { get; set; }
public SubBase SubDocument { get; set; }
public Guid TypeId { get; set; }
public string BaseTitel { get; set; }
}
public class SubBase
{
public int Id { get; set; }
public Guid IdGuid { get; set; }
public string Titel { get; set; }
}
и используйте это сопоставление для создания индекса:
.Mappings(mp => mp
.Map<BaseTest>(m => m
.Properties(pr => pr
.Keyword(kw => kw
.Name(nm => nm.BaseTitel)))
.Properties(pr => pr
.Keyword(kw => kw
.Name(nm => nm.TypeId)))
.Properties(pr => pr
.Keyword(kw => kw
.Name(nm => nm.SubDocument.Titel)))
.Properties(pr => pr
.Keyword(kw => kw
.Name(nm => nm.SubDocument.IdGuid)
))))
когда я пытаюсь найти значения GUID (или строки в формате GUID, если я сохраняю SubBase.Titel как Guid для тестов) в BaseTest, это работает, но не в SubBase. Для поиска я использую этот запрос:
.Query(q => q
.ConstantScore(cs => cs
.Filter(f => f
.Term(t => t
.SubDocument.Titel, "5d511b8a-37c7-40c1-a5c3-4de13e16e379"))))
Обновить
Новое сопоставление:
.Mappings(mp => mp
.Map<BaseTest>(m => m
.Properties(pr => pr
.Keyword(kw => kw
.Name(nm => nm.BaseTitel)
.Name(nm => nm.TypeId)
)
.Object<SubBase>(o => o
.Name(n => n.SubDocument)
.Properties(p => p
.Keyword(k => k
.Name(n => n.Titel)
.Name(n => n.IdGuid)))))))
Теперь я могу найти свойства Guid, но не свойства со строкой типа и значением типа «5d511b8a-37c7-40c1-a5c3-4de13e16e379».
.Properties(), а затем сопоставьте все поля (.Keyword(),.Text()и т. д.) внутри него. Некоторые примеры см. в документации по сопоставлению: elastic.co/guide/en/elasticsearch/client/net-api/current/ - person Russ Cam   schedule 20.04.2018System.Guidсериализуется вstring- person Russ Cam   schedule 20.04.2018SubBaseкак тип данныхobject. Если все свойстваstringиGuidдолжны отображаться какkeyword, вы можете применить посетителя для установки этого соглашения: elastic.co/guide/en/elasticsearch/client/net-api/current/ - person Russ Cam   schedule 20.04.2018.Name(...)внутри.Keyword()должны быть внутри их собственного вызова.Keyword(). По сути, все внутри одного вызова.Keyword()является отображением для одного поля/свойства. - person Russ Cam   schedule 23.04.2018