Я сканирую веб-сайты с помощью Scrapy. Я хочу сохранять данные каждого сканирования непосредственно в Elasticsearch. Мне удалось найти конвейер, написанный именно для этого: https://github.com/jayzeng/scrapy-elasticsearch/ blob / master / scrapyelasticsearch / scrapyelasticsearch.py ​​ Elasticsearch применяет настраиваемое сопоставление к полям, если не указано иное. Я создал индекс на своем локальном хосте с настраиваемым сопоставлением (код прилагается ниже). Индекс успешно создан, и сопоставление также применяется. Теперь, когда я пытаюсь сохранить данные в этом конкретном индексе, к нему не добавляется никакой документ. Однако, если я укажу индекс, который не был создан с помощью настраиваемого сопоставления, к нему добавляются документы.

Код для настраиваемого сопоставления:

from elasticsearch import Elasticsearch
es = Elasticsearch() 

mapping = {
     "mappings": { 
     "properties": { 
        "name": { 
           "type":  "text" 
       }, 
       "last_updated": { 
          "type": "text" 
       }
}}}

es.indices.create(index='my-index', ignore=400, body=mapping)
1
Alizeh Asim 10 Окт 2019 в 15:40

1 ответ

Лучший ответ

Посмотрев на это пару часов, я наконец понял, в чем проблема. Элемент, который я индексировал, был созданным мной настраиваемым объектом, поэтому по умолчанию он НЕ сериализуем в формате JSON. Я просто привел его к типу dict, и это сработало как шарм.

0
Alizeh Asim 14 Окт 2019 в 04:19