В Elastic search, как получить значение "-id" документа, предоставляя уникальный контент, присутствующий в документе - PullRequest
1 голос
/ 01 октября 2019

У меня мало документов, попавших в Elastic search. Пример документа приведен ниже.

                "_index": "author_index",
                "_type": "_doc",
                "_id": "cOPf2wrYBik0KF", --Automatically generated by Elastic search after ingestion
                "_score": 0.13956004,
                "_source": {
                         "author_data": {
                                  "author": "xyz"
                                  "author_id": "123" -- This is unique id for each document 
                                  "publish_year" : "2016"
                     }
                       }

Можно ли получить автоматически сгенерированный _id, отправив author_id из High-level Rest Client?

Я пытался исследовать решения. Но всеРешения только загружают документ, используя _id. Но мне нужна обратная операция.

Ожидается фактический вывод: cOPf2wrYBik0KF

Ответы [ 2 ]

1 голос
/ 01 октября 2019

SearchHit предоставляет доступ к основной информации, такой как индекс, идентификатор документа и оценка каждого попадания поиска, поэтому с помощью API поиска вы можете сделать это таким образом на Java,

String index = hit.getIndex();
String id = hit.Id() ;

ИЛИ что-то вроде этого,

SearchResponse searchResponse =  
client.prepareSearch().setQuery(matchAllQuery()).get();
for (SearchHit hit : searchResponse.getHits()) {
  String yourId = hit.id();
}

СМОТРИТЕ ЗДЕСЬ : https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-search.html#java-rest-high-search-response

0 голосов
/ 01 октября 2019

Вы можете использовать фильтрацию источника. Вы можете отключить извлечение _источника, поскольку вас интересует только _id. _source принимает один или несколько шаблонов подстановочных знаков для управления тем, какие части _источника должны быть возвращены. (https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-source-filtering.html):

GET /author_index
{
  "_source" : false,
  "query" : {
    "term" : { "author_data.author_id" : "123" }
  }
}

Другой подход также даст для _id для поиска. Параметр store_fields предназначен для полей, которые явно помечены как сохраненные в отображении, что по умолчанию отключено и обычно не рекомендуется:

GET /author_index
{
  "stored_fields" : ["author_data.author_id", "_id"],
  "query" : {
    "term" : { "author_data.author_id" : "123" }
  }
}

Вывод для обоих вышеуказанных запросов:

"hits" : [
  {
    "_index" : "author_index",
    "_type" : "_doc",
    "_id" : "cOPf2wrYBik0KF",
    "_score" : 6.4966354
  }

Подробнее здесь: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-stored-fields.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...