我们在无模式模式下运行Solr。使用myfield:value
语法查询某些字段的索引时,如果尚未编制包含该字段的文档,则会出现"undefined field <myfield>"
错误。
这种失败了无模式模式的目的。有解决方法吗?
答案 0 :(得分:2)
我首先想要的是,Solr无模式模式不适合生产使用,它可以用于原型化新的Web应用程序,或者轻松加载大量数据而不是分析它们,但是当您收集稳定后,应该是禁用。
您可以在进行任何查询之前使用Solr Schema API,并仔细检查您使用的字段是否确实存在。
http://localhost:8983/solr/gettingstarted/schema/fields
更新:解释了Solr Schemaless模式的缺点并添加了一个建议
当Schemaless模式处于活动状态时(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不幸出错时会发生什么?您没有其他方法可以手动修改架构,这几乎肯定需要完全重新索引。
当然,我不希望生产模式发生变化,因为在更新过程中,新字段已经以某种未知方式到达。
如果您想使用动态添加字段的解决方案,我建议使用动态字段。所以你有两个好处:
myfield_str:value
之类的查询不会抛出任何异常,即使该字段不存在。