2015-05-20 2 views
0

в упругом поиска Java API, предположим, что я строю индексированных данных с помощью этого клиентаэластичный поиск: Как получить индексированные данные

Node node = nodeBuilder().clusterName("es").node(); 
Client client = node.client(); 

IndexResponse response = client.prepareIndex("twitter", "tweet", "1") 
    .setSource(jsonBuilder() 
       .startObject() 
        .field("user", "kimchy") 
        .field("postDate", new Date()) 
        .field("message", "trying out Elasticsearch") 
       .endObject() 
      ) 
    .execute() 
    .actionGet(); 

Это индексированный данные хранятся в папке XYZ/elasticsearch/данных. Мой вопрос заключается в том, как получить эти индексированные данные в java от другого клиента или другого кода. Есть ли способ, которым я могу указать путь, и уже проиндексированные данные могут быть импортированы, тогда я могу выполнять запросы на нем?

Edit:

Код для клиента на другом компьютере

Node node = nodeBuilder().clusterName("es").node(); 
Client client = node.client(); 

MatchQueryBuilder qb = QueryBuilders.matchQuery("user", "kimchy"); 
SearchRequestBuilder srb = client.prepareSearch("twitter").setTypes("tweet"); 
SearchResponse big = srb.setQuery(qb).execute().actionGet(); 
SearchHit[] results = big.getHits().getHits(); 

Это показывает

search.SearchPhaseExecutionException: Failed to execute phase [query], all shards failed 

Благодаря

Arya

+0

почему вы не запрашивая его непосредственно на HTTP: // локальный: 9200 вы можете начать с match_all запроса { "запрос": { "match_all": {}} –

+0

@AkashYadav, РВП вещи, Я не буду запрашивать на своем компьютере, я буду просто индексировать его, тогда я просто переношу папку, содержащую данные, на другой компьютер, где я буду запрашивать его. Как я могу получить эти уже проиндексированные данные. Спасибо – Enigma

+0

Процесс будет таким же, просто установите эластичный поиск в другой системе и поместите папку с данными в папку узла в общем месте/usr/share/elasticsearch/data/в системе ubuntu, и все будет работать так же, как и в вашей системы. вы должны использовать одно и то же имя индекса и тот же url, как указано выше. Надеюсь это поможет. –

ответ

0

Я не уверен, что U nderstand вопрос, но если это просто запрос в Java вот пример:

MatchQueryBuilder qb = QueryBuilders.matchQuery("user", "kimchy); 
SearchRequestBuilder srb = client.prepareSearch("twitter").setTypes("tweet"); 
srb.setQuery(qb); 
SearchResponse response = srb.execute().actionGet(); 
//Here goes your code where you use response.getHits() that contains your items 
+0

Christophe, я хочу спросить, как если бы мы проиндексировали данные и сохранили их в папке XYZ/data, и я переношу эту папку на другой компьютер. Тогда как я могу использовать эти данные на новом сервере и клиент. Спасибо – Enigma

+0

Забавно спросить, я сделал именно это 2 дня назад для демонстрации. В основном, что я сделал, это копировать/вставлять весь сервер ElasticSearch (с папкой с данными, содержащими данные) и запускать его на новом компьютере, работая как прелесть (по крайней мере, для демонстрационных целей, я бы не предложил его для производства, вы никогда не знать). Если вы хотите добавить данные на уже существующий сервер ElasticSearch с другими данными, я не думаю, что это сработает, вам, вероятно, потребуется найти что-то еще в документации. –

+0

Christophe Я попытался это сделать, см. Раздел редактирования вопроса выше. Знаете ли вы об этом исключении, о котором идет речь. Спасибо, в любом случае – Enigma

0

Сообщение, которое вы получите, используя мой фрагмент кода, как правило, указывает на то, что ваш клиент не удается подключиться к серверу. Проверьте состояние своего сервера (то есть, что вы запустили свой сервер должным образом) и попробуйте использовать это.

Node node = NodeBuilder.nodeBuilder().client(true).node(); 
    client = node.client(); 

Я не думаю, что вам нужно указать clustername, если у вас нет пользовательской конфигурации, о которой я не знаю. Также проверьте свое имя индекса.

Смежные вопросы