Получить только внутренний _id с помощью NEST ElasticClient

ArrayIndexOutOfBoundsException само имя объясняет, что если вы пытаетесь получить доступ к значению в индексе, который выходит за рамки размера массива, возникает такое исключение.

В вашем случае вы можете просто удалить знак равенства из цикла for.

for(int i = 0; i<name.length; i++)

Лучшим вариантом является итерация массива:

for(String i : name )
      System.out.println(i);
0
задан BennoDual 13 July 2018 в 14:24
поделиться

1 ответ

_id не является частью документа _source, а является частью метаданных попадания для каждого попадания в массив hits.

Самый компактный способ вернуть только поля _id будет с с использованием фильтрации ответа , которая отображается как FilterPath в NEST

private static void Main()
{
    var defaultIndex = "documents";
    var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));

    var settings = new ConnectionSettings(pool)
        .DefaultIndex(defaultIndex)
        .DefaultTypeName("_doc");

    var client = new ElasticClient(settings);

    if (client.IndexExists(defaultIndex).Exists)
        client.DeleteIndex(defaultIndex);

    client.Bulk(b => b
        .IndexMany<object>(new[] {
            new { Message = "hello" },
            new { Message = "world" }
        })
        .Refresh(Refresh.WaitFor)
    );

    var searchResponse = client.Search<object>(new SearchRequest<object>
    {
        From = 0 * 100,
        Size = 100,
        FilterPath = new [] { "hits.hits._id" },
        Query = new QueryStringQuery
        {
            Query = ""
        }
    });

    foreach(var id in searchResponse.Hits.Select(h => h.Id))
    {
        // do something with the ids
        Console.WriteLine(id);
    }
}

. Ответ JSON от Elasticsearch на запрос поиска выглядит как

{
  "hits" : {
    "hits" : [
      {
        "_id" : "6gs8lmQB_8sm1yFaJDlq"
      },
      {
        "_id" : "6Qs8lmQB_8sm1yFaJDlq"
      }
    ]
  }
}
2
ответ дан Russ Cam 17 August 2018 в 12:37
поделиться
  • 1
    Это действительно делает поиск или просто возвращает идентификаторы doc из ES? – sramalingam24 14 July 2018 в 02:38
  • 2
    @ sramalingam24 выполняет фактический поиск (хотя в этом примере пустой query_string запрос будет оценивать безрезультатный запрос NEST, поэтому будет таким же, как предложение без запроса). – Russ Cam 14 July 2018 в 07:09
Другие вопросы по тегам:

Похожие вопросы: