Индексировать имя файла JSON вместе с содержимым JSON в Solr - PullRequest
0 голосов
/ 18 мая 2018

У меня есть 2 каталога: один с txt-файлами, а другой - с соответствующими файлами JSON (метаданных) (около 90000 каждого).Существует один файл JSON для каждого файла CSV, и они имеют одно и то же имя (они не разделяют другие поля).Я пытаюсь проиндексировать все эти файлы в Apache Solr.

TXT-файлы просто имеют простой текст, я сопоставил каждую строку с полем вызова «предложение» и включил имя файла в качестве поля, используя обработчик импорта данных,Здесь нет проблем.

Файл JSON содержит метаданные: 3 тега: URL, автор и заголовок (для содержимого в соответствующем текстовом файле).Когда я индексирую файл JSON (я просто использовал схему _default и разместил поля в схеме, как объяснено в официальном руководстве по solr), я не знаю, как получить имя файла в индексе как поле.Насколько я знаю, это не способ использовать обработчик импорта данных для файлов JSON.Я читал, что могу передать литерал через инструмент bin / post, но, насколько я понимаю, я не могу передать имя файла динамически как литерал.

Мне нужно получить имя файла, это единственный способ, которым я могу связать метаданные с каждым предложением в текстовых файлах в моем нижестоящем коде Python.

Так что, если у кого-то естьпредложение о том, как мне индексировать имя файла JSON вместе с содержимым JSON (или даже какой-то обходной путь), я был бы вечно благодарен.

1 Ответ

0 голосов
/ 20 июля 2018

Как упомянул @MatsLindh в комментариях, я использовал Pysolr для индексирования и получения имени файла.Это довольно просто, но я подумал, что опубликую то, что сделал, потому что у Pysolr не так много документации.

Итак, вот как вы используете Pysolr для индексации нескольких файлов JSON, а также индексации имени файла.Этот метод можно использовать, если ваши файлы и файлы метаданных имеют одно и то же имя файла (но разные расширения), и вы хотите как-то связать их вместе, как в моем случае.

  • Откройте соединение с вашим экземпляром Solr с помощью команды pysolr.Solr .
  • Перейдите в каталог, содержащий ваши файлы, и получите имя файла каждого файла, используя os.path.basename, и сохраните его в переменной (после удаления расширения, если это необходимо).
  • Считать содержимое файла JSON в другую переменную.
  • Pysolr ожидает, что все, что нужно проиндексировать, будет сохранено в списке словарей, где каждый словарь соответствует одной записи.
  • Сохраните все поля, которые вы хотите проиндексировать, в словаре (solr_content в моем коде ниже), убедившись, что ключи соответствуют именам полей в вашем файле управляемой схемы.
  • Добавьте созданный словарьв каждой итерации к списку (list_for_solr в моем коде).
  • Вне цикла, используйте команду solr.add , чтобы отправить свой список словарей для индексирования в Solr.
  • Вот и все!Вот код.

    solr = pysolr.Solr('http://localhost:8983/solr/collection_name')
    folderpath = directory-where-the-files-are-present
    list_for_solr = []
    for filepath in iglob(os.path.join(folderpath, '*.meta')):
        with open(filepath, 'r') as file:
            filename = os.path.basename(filepath)
            # filename is xxxx.yyyy.meta
            filename_without_extension = '.'.join(filename.split('.')[:2])
            content = json.load(file)
        solr_content = {}
        solr_content['authors'] = content['authors']
        solr_content['title'] = content['title']
        solr_content['url'] = content['url']
        solr_content['filename'] = filename_without_extension
        list_for_solr.append(solr_content)
    solr.add(list_for_solr)
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...