如何在solr中存储信息?
How to store information in solr?
我最近开始学习solr,对我来说有些东西仍然难以理解,我会解释我正在尝试做的事情,请告诉我该怎么做。
我需要一个可以保存数据的网络应用程序,其中一些字段将以文本形式存在,一些以文件形式存在,如何以文本形式添加字段是可以理解,不可能添加文件,或者它们的内容是文本,在这种情况下我不知道文件本身存储在哪里?
如果你需要查找一个文件,并且从整个文件中只能知道它的几个词,我希望所有文件都出现在其中有这些词,这种情况下我是否应该添加一个单独的数据库?如果是这样,将文件存储在哪里?如果不是,同样的问题。
我会很高兴和理解一些例子,也许你有 link?
这太宽泛了,non-specific 无法给出您可以实施的答案;通常,您会将文档连同 ID 一起提交给 Solr (through Tika in the Extracting Request Handler / Solr Cell)。
文档本身必须存储在其他地方,因为 Solr 不会为您处理文档存储。它们可以存储在云服务、网络驱动器或本地磁盘上 - 这取决于您的 Web 应用程序。
然后您的应用程序将从用户接收文件,存储一个数据库行,将文件分配给用户,将文件存储在某处(S3/GoogleCloudStorage/Local 路径)下的 well-known 名称(通常是数据库中行的 ID)并将内容提交给 Solr 进行索引 - 连同元数据(例如用户 ID)和文件 ID。
然后搜索会返回 ID,您可以从存储文件的任何位置检索该文件。
正如 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>
在 G:\Solr\TikaConf\conf
文件夹下创建一个名为 tika-data-config.xml
的文件。使用以下配置。这个位置对你来说可能不同。
<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 管理页面和 select 您创建的核心,然后单击数据导入。
数据导入或索引后,您可以通过查询来验证。
如果你的文件位置是动态的,意味着你正在从数据库中检索文件位置,然后这将是你的第一个实体,它从你的数据库中检索关于文件元数据的信息,比如 id、名称、作者和文件路径等。在第二个实体 TikaEntityProcessor 中,传递文件路径并获取索引文件的内容...
我最近开始学习solr,对我来说有些东西仍然难以理解,我会解释我正在尝试做的事情,请告诉我该怎么做。
我需要一个可以保存数据的网络应用程序,其中一些字段将以文本形式存在,一些以文件形式存在,如何以文本形式添加字段是可以理解,不可能添加文件,或者它们的内容是文本,在这种情况下我不知道文件本身存储在哪里?
如果你需要查找一个文件,并且从整个文件中只能知道它的几个词,我希望所有文件都出现在其中有这些词,这种情况下我是否应该添加一个单独的数据库?如果是这样,将文件存储在哪里?如果不是,同样的问题。
我会很高兴和理解一些例子,也许你有 link?
这太宽泛了,non-specific 无法给出您可以实施的答案;通常,您会将文档连同 ID 一起提交给 Solr (through Tika in the Extracting Request Handler / Solr Cell)。
文档本身必须存储在其他地方,因为 Solr 不会为您处理文档存储。它们可以存储在云服务、网络驱动器或本地磁盘上 - 这取决于您的 Web 应用程序。
然后您的应用程序将从用户接收文件,存储一个数据库行,将文件分配给用户,将文件存储在某处(S3/GoogleCloudStorage/Local 路径)下的 well-known 名称(通常是数据库中行的 ID)并将内容提交给 Solr 进行索引 - 连同元数据(例如用户 ID)和文件 ID。
然后搜索会返回 ID,您可以从存储文件的任何位置检索该文件。
正如 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>
在 G:\Solr\TikaConf\conf
文件夹下创建一个名为 tika-data-config.xml
的文件。使用以下配置。这个位置对你来说可能不同。
<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 管理页面和 select 您创建的核心,然后单击数据导入。
数据导入或索引后,您可以通过查询来验证。
如果你的文件位置是动态的,意味着你正在从数据库中检索文件位置,然后这将是你的第一个实体,它从你的数据库中检索关于文件元数据的信息,比如 id、名称、作者和文件路径等。在第二个实体 TikaEntityProcessor 中,传递文件路径并获取索引文件的内容...