Больше как этот запрос не получает сериализацию - NEST - PullRequest
1 голос
/ 18 апреля 2019

Я пытаюсь создать запрос Elasticsearch MLT, используя синтаксис инициализатора объекта NEST. Однако последний запрос при сериализации пропускает ТОЛЬКО часть MLT. Все остальные запросы присутствуют.

При проверке объекта запроса присутствует MLT. Это просто не сериализовано.

Интересно, что я могу делать не так?

Я также заметил, что когда я добавляю поля, это работает. Но я не верю, что поля являются обязательным свойством: если оно не задано, запрос MLT игнорируется.

Запрос MLT инициализируется так:

new MoreLikeThisQuery
        {
            Like = new[]
            {
                new Like(new MLTDocProvider
                {
                    Id = parameters.Id
                }), 
            }
        }

MLTDocProvider реализует интерфейс ILikeDocument.

Я ожидаю, что сериализованный запрос будет содержать часть MLT, но это единственная часть, которая отсутствует.

1 Ответ

1 голос
/ 26 апреля 2019

Это похоже на ошибку в безусловном поведении, более похожем на этот запрос в NEST; Я открыл вопрос по адресу . В то же время вы можете получить желаемое поведение, отметив MoreLikeThisQuery дословно, что заменит безусловное поведение NEST

var client = new ElasticClient();

var parameters = new 
{
    Id = 1
};


var searchRequest = new SearchRequest<Document>
{
    Query = new MoreLikeThisQuery
    {
        Like = new[]
        {
            new Like(new MLTDocProvider
            {
                Id = parameters.Id
            }),
        },
        IsVerbatim = true
    }
};

var searchResponse = client.Search<Document>(searchRequest);

, который сериализуется как

{
  "query": {
    "more_like_this": {
      "like": [
        {
          "_id": 1
        }
      ]
    }
  }
}
...