在无架构 Solr 中查询字段会引发"undefined field"错误



我们在无架构模式下运行Solr。当使用myfield:value语法查询某些字段的索引时,如果尚未对包含该字段的文档进行索引,则会出现"undefined field <myfield>"错误。

这种模式违背了无计划模式的目的。有变通办法吗?

我想要的第一个前提是,Solr无架构模式不用于生产,它用于构建新的web应用程序的原型,或者轻松加载大量数据并进行分析,但之后,当收集稳定时,应该禁用。

在进行任何查询之前,您可以使用Solr Schema API,并仔细检查您使用的字段是否真的存在。

http://localhost:8983/solr/gettingstarted/schema/fields

更新:解释了Solr无模式的缺点,并添加了一个建议

无模式激活时(update.autoCreateFields设置为true):

<updateRequestProcessorChain 
name="add-unknown-fields-to-the-schema"
default="${update.autoCreateFields:true}"
processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse-long,parse-double,parse-date,add-schema-fields">

你让Solr猜测你正在索引的每个新字段的类型。那么,当Solr不幸犯错时会发生什么呢?您没有其他手动修改模式的方法,这几乎肯定需要一个完整的重新索引。

当然,我不希望生产模式发生更改,因为在更新过程中,以某种未知的方式出现了新字段。

如果您希望使用动态添加字段的解决方案,我建议使用动态字段。因此,您将获得两个好处:

  1. 只有在添加新字段时才决定字段类型
  2. 当您知道fieldType时,像myfield_str:value这样的查询不会抛出任何异常,即使该字段不存在

最新更新