我们在无架构模式下运行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不幸犯错时会发生什么呢?您没有其他手动修改模式的方法,这几乎肯定需要一个完整的重新索引。
当然,我不希望生产模式发生更改,因为在更新过程中,以某种未知的方式出现了新字段。
如果您希望使用动态添加字段的解决方案,我建议使用动态字段。因此,您将获得两个好处:
- 只有在添加新字段时才决定字段类型
- 当您知道fieldType时,像
myfield_str:value
这样的查询不会抛出任何异常,即使该字段不存在