Как вы получаете эластичный поиск для создания уникальных идентификаторов для объектов, созданных с помощью REST? - PullRequest
0 голосов
/ 29 января 2020

Краткая версия : как получить elasti c search для генерации идентификатора объекта и использования его как «_id» и установки его в объекте.

Длинная версия : В успокоительном API я обычно не знаю идентификатор объекта, который вставляю в базу данных. Например, я мог бы создать рецепт для "Паста Салат"

Мой вызов покоя (и тело) будет что-то вроде этого

POST /api/v1/recipe

{
  "title": "Pasta Salad",
  "details": "..."  
}

В C# мое представление для этого что-то вот так ...

public class Recipe
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Details { get; set; }
}

Я бы не ожидал, что вызывающая сторона узнает, как сгенерировать идентификатор, который не был использован, и я ожидаю, что любой объект, хранящий объект, создаст идентификатор. Обычно в базе данных для этого нужно иметь последовательность / сгенерированный в качестве столбца идентификаторов.

При чтении мне будет возвращен объект со следующим заполненным значением идентификатора.

Как получить asticsearch для генерации свойства Id объекта C# при создании документа, чтобы он был уникальным, а затем использовать его в качестве значения _id в поиске elasti c?

Это то, что у меня есть в ConnectionSettings

var connectionSettings = new ConnectionSettings(elasticSearchUri)
    .DefaultIndex(elasticSearchDefaultIndex)
    .DefaultMappingFor<Recipe>(r => r.IdProperty(x => x.Id));

Вот как я создаю документ вasticsearch ...

        var recipe = new Recipe
        {
            Title = "Pasta Salad",
            Details = "..."
        };

        var response = await _elasticClient.IndexDocumentAsync(recipe);

Просмотр http://localhost: 9200 / default / _doc / _search

... так чтоasticsearch генерирует уникальное значение «_id», но не устанавливает «Id» для самого объекта

"hits":{"total":{"value":1,"relation":"eq"},"max_score":1.0,"hits":[{"_index":"default","_type":"_doc","_id":"3oeo8W8BfYYLXBBW8Vac","_score":1.0,"_source":{"title":"Pasta Salad","details":"..."}}]}}

Если я включаю идентификатор (в мой C# объект), _id и id объекта установлены в соответствии с ожиданиями, проблема в том, что я не знаю идентификатор во время вставки, как мне выполнить поиск elasti c, чтобы получить следующий уникальный идентификатор?

"hits":{"total":{"value":1,"relation":"eq"},"max_score":1.0,"hits":[{"_index":"default","_type":"_doc","_id":"1","_score":1.0,"_source":{"id":1,"title":"Pasta Salad","details":"..."}}]}}

1 Ответ

0 голосов
/ 29 января 2020

Вы можете присвоить значению "_id" любое значение. Так что в вашем случае назначение значения Id объекта свойству _id документа Elasticsearch будет работать.

...