代码之家  ›  专栏  ›  技术社区  ›  ash

在Solr中索引JSON文件名和JSON内容

  •  0
  • ash  · 技术社区  · 7 年前

    我有两个目录:一个是txt文件,另一个是相应的JSON(元数据)文件(每个大约90000个)。每个CSV文件都有一个JSON文件,它们共享相同的名称(不共享任何其他字段)。我正在尝试在Apache solr中索引所有这些文件。

    txt文件只有纯文本,我将每一行映射到一个字段调用“句子”,并使用数据导入处理程序将文件名包含为字段。这里没有问题。

    JSON文件有元数据:3个标记:URL、作者和标题(对应txt文件中的内容)。 当我为JSON文件编制索引时(我只是使用了\u默认模式,并将字段发布到模式中,如官方solr教程中所述),我不知道如何将文件名作为字段放入索引中。据我所知,对于JSON文件,无法使用数据导入处理程序。我已经读到,我可以通过bin/post工具传递一个文本,但就我所知,我无法将文件名作为文本动态传递。

    我需要获得文件名,这是唯一可以将元数据与下游Python代码中txt文件中的每个句子相关联的方法。

    因此,如果有人对我应该如何索引JSON文件名和JSON内容(甚至一些解决方法)有什么建议,我将万分感激。

    1 回复  |  直到 7 年前
        1
  •  1
  •   ash    6 年前

    正如@MatsLindh在评论中提到的,我使用Pysolr进行索引并获取文件名。这是非常基本的,但我想我会发布我所做的,因为Pysolr没有太多文档。

    下面是如何使用Pysolr索引多个JSON文件,同时也索引文件的文件名。如果您的文件和元数据文件具有相同的文件名(但扩展名不同),并且希望以某种方式将它们链接在一起,如我的情况,则可以使用此方法。

    • 使用打开到Solr实例的连接 皮索尔。Solr公司 命令
    • 循环遍历包含文件的目录,并使用os获取每个文件的文件名。路径basename并将其存储在变量中(如有必要,请在删除扩展名后)。
    • 将文件的JSON内容读入另一个变量。
    • Pysolr希望索引的内容存储在 每个字典对应一条记录的字典列表。
    • 将要索引的所有字段存储在字典中(下面我的代码中的solr\u内容),同时确保键与托管架构文件中的字段名称匹配。
    • 将在每次迭代中创建的字典附加到列表中(在我的代码中,list\u for\u solr)。
    • 在循环外部,使用 solr公司。添加 命令发送要在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)