ElasticSearch & NEST 6.x: отображение сложного объекта в строку - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь настроить индекс вasticsearch и сталкиваюсь с проблемой с дочерним объектом.

Учитывая следующее:

public class VersionNo
{
    public string Major { get; set; }
    public string Minor { get; set; }
    public string Build { get; set; }
    public string Revision { get; set; }

    public override string ToString()
    {
        return $"{Major}_{Minor}_{Build}_{Revision}";
    }
}

public class Workflow
{
    public string Id { get; set; }

    public string Name { get; set; }

    public VersionNo VersionNo { get; set; }
}

Как мне построить свободное отображение дляWorkflow.VersionNo, чтобы индекс заканчивался на "Major.Minor.Build.Revision"?В приведенном ниже примере я не могу понять, как настроить "versionNo", чтобы правильно комбинировать дочерние поля ...

.Mappings(ms => ms
                .Map<Workflow>(m => m
                    .Properties(props => props
                        .Text(t => t
                            .Name("name")
                        )
                        .Text(t => t
                            .Name("versionNo")
                        )
                        .Text(t => t
                            .Name("id")
                        )
                    )
                )
            )

1 Ответ

0 голосов
/ 31 мая 2018

Вам необходимо указать NEST, как сериализовать VersionNo, чтобы экземпляр типа был сериализован в виде строки.Самый простой способ сделать это -

  1. Добавить пакет nuget NEST.JsonNetSerializer
  2. Подключить JsonNetSerializer в NEST.JsonNetSerializerпакет , чтобы Json.NET был сериализатором, используемым NEST для ваших документов
  3. Запись custom JsonConverter для VersionNo, который знает, как сериализовать VersionNo встроковое значение и как прочитать строковое значение в VersionNo

В качестве альтернативы, вы можете просто определить строковое свойство в VersionNo, которое объединяет значениекак переопределенный метод ToString().Это свойство может затем отображаться в Elasticsearch в дополнение к свойствам Major, Minor, Build и Revision.При таком подходе вы можете выполнять поиск по любому из свойств, поскольку каждое из них будет проиндексировано.

...