2013-11-19 6 views
7

У меня уже есть MongoDB и установлен Elasticsearch с Mongoriver. Так что я создал мою реку:Индекс mongoDB с ElasticSearch

$ curl -X PUT localhost:9200/_river/database_test/_meta -d '{ 
    "type": "mongodb", 
    "mongodb": { 
    "servers": [ 
     { 
     "host": "127.0.0.1", 
     "port": 27017 
     } 
    ], 
    "options": { 
     "secondary_read_preference": true 
    }, 
    "db": "database_test", 
    "collection": "event" 
    }, 
    "index": { 
    "name": "database_test", 
    "type": "event" 
    } 
}' 

Я просто хочу, чтобы получить события, которые country:Canada поэтому я стараюсь:

$ curl -XGET 'http://localhost:9200/database_test/_search?q=country:Canada' 

И я получаю:

{ 
    "took": 2, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 0, 
    "max_score": null, 
    "hits": [] 
    } 
} 

Я поиск в Интернете и я прочитал, что должен сначала проиндексировать мою коллекцию с помощью Elasticsearch (потерял ссылку). Должен ли я индексировать мой монгод? Что мне делать, чтобы получить результаты из существующей коллекции MongoDB?

ответ

18

Река mongodb полагается на журнал операций MongoDB для индексации документов, поэтому требуется, чтобы вы создали свою базу данных mongo в качестве набора реплик. Я предполагаю, что вам это не хватает, поэтому, когда вы создаете реку, первоначальный импорт ничего не видит для индексации. Я также предполагаю, что вы на Linux, и у вас есть ручка на корпусе Cli инструментов, поэтому попробуйте следующее:

Выполните следующие действия:

  • Убедитесь, что плагины картографа-вложения Elasticsearch также установлен
  • Сделайте резервную копию базы данных с mongodump
  • редактировать mongodb.conf (обычно в /etc/mongodb.conf, но зависит от того, как вы установили его) и добавьте строку:

    replSet = rs0

    «rs0» - это имя реплик-комплекта, оно может быть любым, что вам нравится.

  • перезагрузите монго, а затем войдите в свою консоль. Тип:

    rs.initiate()
    rs.slaveOk()

Стремительное изменится rs0:PRIMARY>

  • Теперь создать реку так же, как вы делали в этом вопросе и восстановить базу данных с mongorestore. Elasticsearch должен индексировать ваши документы.

Я рекомендую использовать этот плагин: http://mobz.github.io/elasticsearch-head/, чтобы перемещаться по своим индексам и рекам и следить за тем, чтобы ваши данные были проиндексированы.

Если это не работает, напишите, какие версии вы используете для mongodb-river-plugin, elasticsearch и mongodb.

+1

Работали как очарование. Я искал довольно долгое время. Спасибо! – y2p

+0

Привет, у меня такая же проблема ... последовали за вашим ответом, но все равно получаю ту же самую ошибку..им, используя mongodb-2.6.1, elasticsearch «lucene_version»: «4.6», elasticsearch-river-mongodb-1.7.1 и elasticsearch-mapper- вложения/1.9.0 – praaveen

+0

Происходит ли фактический ES-индекс после завершения mongorestore? – Shmukers

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