首页 > 解决方案 > 关于将更改加载到架构的 Solr 问题

问题描述

我是 Solr 的新手,通过添加文档时收到以下错误pysolr

pysolr.SolrError: Solr responded with an error (HTTP 400): [Reason: ERROR: [doc=bc4aa768-6f35-4888-80e0-1578d9971b3c] Error adding field 'periodical_nlm'='2984692R' msg=For input string: "2984692R"]

我最终发现periodical_nlm添加的第一个值是404536.0,所以我认为这是一个类型问题。在 Python 中,我periodical_nlm在添加之前将 every 显式转换为字符串2984692R。但是,错误仍然存​​在。

我用谷歌搜索了一下,发现我可能应该明确告诉 Solr 我希望该字段是一个字符串。我还没有非常“动手”使用模式,所以我有一些问题:

(1) 似乎有两个模式文件:managed-schema在核心目录和核心文件夹managed-schemaconf。我假设正在使用的初始化模式是conf文件夹中的模式?

(2) 为了让事情顺利进行,我应该更新哪些内容?我尝试将以下内容添加到核心目录中的架构文件中,但错误仍然存​​在:

field name="periodical_nlm" type="string" indexed="true" stored="true" required="false" multiValued="false" />

我是否需要重新运行一些初始化过程或conf单独向文件中添加一些内容?

非常感谢,如果您需要更多信息,请告诉我。我在 Windows 10 Home x64 平台上运行(如果我需要运行任何命令行的东西,不确定这是否重要......)。

标签: python-3.xsolrfieldpysolrsolr-schema

解决方案


只要在更改下managed-schema文件后重新加载内核conf,就可以了。请注意,您应该在索引内容之前执行此操作- 因此您可能需要通过删除所有内容来清除索引,然后更改架构并重新索引您的内容。更改架构不会更改已编入索引的内容。

否则您的假设是正确的,并且无模式模式(其中类型由提交的第一个值的格式确定(不是类型 - 因为通常不以任何方式包含它,所有值在提交时都只是字符串,所以 Solr 尝试通过应用模式匹配的层次结构来猜测类型))对于原型设计很有用 - 当您转向生产时,您应该始终明确定义模式以避免出现像您在这里看到的问题。


推荐阅读