如何在Solr中存储信息?

时间:2019-06-07 16:31:51

标签: solr

我最近开始学习solr,对我来说有些事情仍然难以理解,我将解释我正在尝试做的事情,请告诉我要走的路。

我需要一个Web应用程序,可以在其中保存数据,某些字段以文本形式保存,某些字段以文件形式保存,如何以文本形式添加字段是可以理解的,无法添加文件或其内容为文本,在这种情况下,我不知道文件本身存储在哪里?

如果您需要找到一个文件,并且整个文件中只有几个单词,我希望所有出现这些单词的文件都出现,在这种情况下是否应该添加一个单独的数据库?如果是这样,文件存储在哪里?如果不是,则是相同的问题。

我会很高兴并且可以理解某些示例,也许您有链接?

2 个答案:

答案 0 :(得分:1)

这太宽泛且不够具体,无法给出您可以实施的答案;通常,您需要将文档和ID一起提交给Solr(through Tika in the Extracting Request Handler / Solr Cell)。

文档本身必须存储在其他地方,因为Solr不会为您处理文档存储。它们可以存储在云服务,网络驱动器或本地磁盘上-这取决于您的Web应用程序。

然后,您的应用程序将接收来自用户的文件,存储一个将文件分配给用户的数据库行,将文件存储在某个名称(通常为该行的ID)下的某处(S3 / GoogleCloudStorage / Local路径)从数据库),然后将内容与元数据(例如用户ID)和文件ID一起提交给Solr进行索引。

搜索后会返回ID,您可以从存储文档的任何地方检索该文档。

答案 1 :(得分:0)

由于MatsLindh已经提到了一种实现所需内容的方法。

您可以通过以下步骤索引位置已知的文件。

用以下几行更新solrConfig.xml

<!-- Load Data Import Handler and Apache Tika (extraction) libraries -->
    <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar"/>
    <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar"/>

  <requestHandler name="/dataimport" class="solr.DataImportHandler">
    <lst name="defaults">
      <str name="config">tika-data-config.xml</str>
    </lst>
  </requestHandler>

tika-data-config.xml文件夹下创建一个名为G:\Solr\TikaConf\conf的文件。具有以下配置。这个位置可能与您不同。

<dataConfig>
  <dataSource type="BinFileDataSource"/>
  <document>
    <entity name="file" processor="FileListEntityProcessor" dataSource="null"
            baseDir="G:/Solr/solr-7.7.2/example/exampledocs" fileName=".*xml"
            rootEntity="false">

      <field column="file" name="id"/>

      <entity name="pdf" processor="TikaEntityProcessor"
              url="${file.fileAbsolutePath}" format="text">

        <field column="text" name="text"/>

      </entity>
    </entity>
  </document>
</dataConfig>

在您的schema.xml

中添加以下字段
<field name="text" type="text_general" indexed="true" stored="true" multiValued="false"/>

如下更新solrConfig xml文件以禁用无模式模式

<!-- The update.autoCreateFields property can be turned to false to disable schemaless mode -->
  <updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:false}"
           processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse-long,parse-double,parse-date,add-schema-fields">
    <processor class="solr.LogUpdateProcessorFactory"/>
    <processor class="solr.DistributedUpdateProcessorFactory"/>
    <processor class="solr.RunUpdateProcessorFactory"/>
  </updateRequestProcessorChain>

转到solr admin页面并选择您创建的核心,然后单击数据导入。

Solr Data Import

一旦数据被导入或建立索引,您可以通过查询对其进行验证。

Solr Query Page

如果文件位置是动态的,则意味着您正在从数据库中检索文件位置,然后这将是您的第一个实体,该实体从数据库中检索有关文件元数据的信息,例如ID,名称,作者和文件路径等等。在第二个实体TikaEntityProcessor中,传递文件路径并获取索引文件的内容...