Индексировать вывод XML веб-службы отдыха на сервер Solr - PullRequest
1 голос
/ 27 сентября 2011

Как я могу проиндексировать сервер Solr с содержанием веб-службы.

мой вывод на веб-сервис выглядит так enter image description here

Теперь я хочу проиндексировать сервер Solr с содержимым под XML, как показано выше

как мне проиндексировать это в apache solr.

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

Сделайте сценарий на вашем любимом языке сценариев (Python для меня).Я сделал что-то похожее с базами данных и надеюсь, что подобное решение подойдет вам.

С Python:

  1. urllib2 может получить тело вашей веб-страницы, учитывая URL.
  2. Используйте синтаксический анализатор XML, например etree, для рекурсивного спуска по дереву и преобразования его в иерархию XML / JSON по вашему выбору (по вашему усмотрению)
  3. Загрузить его в Solr (Solr позволяет загружать в XML, JSON, CSV и т. Д.).

И периодически запускать этот скрипт, как задание cron.


Вам потребуется два фрагмента кода: один для запроса службы RESTful и получения тела ответа.;другой - для загрузки отформатированного документа в Solr.

Этот фрагмент кода загружает объект Python request_obj в указанный request_url , и ответ solr возвращается в виде Pythonобъект.Нативный объект Python (состоящий из словарей (ассоциативных массивов), списков, строк, чисел) легко преобразуется в JSON (с 1-2 оговорками).

Используйте это только для справки.Я не гарантирую пригодность для ваших целей.

Не забудьте использовать / update / json? Wt = python , который доступен в Solr 3.3 и далее.Вам нужна библиотека MultipartPostHandler.

def solr_interface(self,request_url,request_obj):
    request=json.dumps(request_obj,indent=4,encoding="cp1252")
    opener = urllib2.build_opener(MultipartPostHandler.MultipartPostHandler)
    urllib2.install_opener(opener)
    req = urllib2.Request(request_url, request)
    req.add_header("Content-Type", "application/json")
    text_response = urllib2.urlopen(req).read().strip()
    return ast.literal_eval(text_response)

Что касается синтаксического анализа (и составления) XML в Python, используйте эти превосходные учебные пособия http://www.learningpython.com/2008/05/07/elegant-xml-parsing-using-the-elementtree-module/ и http://effbot.org/zone/element.htm

Это пример командной строки.

from xml.etree import ElementTree as ET
elem =ET.fromstring("<doc><p>This is a block</p><p>This is another block</p></doc>")
for subelement in elem:
...     print subelement.text
... 
This is a block
This is another block
1 голос
/ 27 сентября 2011

Вам понадобится выполнить следующие шаги, чтобы проиндексировать ваши данные.

  1. Настройте вашу индексную схему для полей, которые вы хотите проиндексировать. Исходя из приведенного выше примера, вы хотели бы поля для имени класса, имя_пакета и URL. См. SolrSchema для получения более подробной информации.
  2. Добавьте документы в свой индекс. Пожалуйста, смотрите одно из следующих подробностей о том, как вы можете это сделать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...