【发布时间】:2017-10-17 09:30:04
【问题描述】:
我们正在以无模式模式运行 Solr。使用 myfield:value 语法查询某些字段的索引时,如果尚未索引包含该字段的文档,我会收到 "undefined field <myfield>" 错误。
这种方式违背了无模式模式的目的。有解决办法吗?
【问题讨论】:
标签: solr
我们正在以无模式模式运行 Solr。使用 myfield:value 语法查询某些字段的索引时,如果尚未索引包含该字段的文档,我会收到 "undefined field <myfield>" 错误。
这种方式违背了无模式模式的目的。有解决办法吗?
【问题讨论】:
标签: solr
我想要的第一个前提是 Solr 无模式模式不是用于生产用途,它是用于原型设计一个新的 Web 应用程序,或者轻松加载大量数据而不是分析它们,但是当你收集稳定之后,应该是禁用。
您可以在进行任何查询之前使用Solr Schema API,并仔细检查您正在使用的字段是否真的存在。
http://localhost:8983/solr/gettingstarted/schema/fields
更新:解释了 Solr 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 这样的查询不会引发任何异常,即使该字段不存在。【讨论】: