查询无模式Solr中的字段会引发"未定义的字段"错误

时间:2017-10-17 09:30:04

标签: solr

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

这种失败了无模式模式的目的。有解决方法吗?

1 个答案:

答案 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不幸出错时会发生什么?您没有其他方法可以手动修改架构,这几乎肯定需要完全重新索引。

当然,我不希望生产模式发生变化,因为在更新过程中,新字段已经以某种未知方式到达。

如果您想使用动态添加字段的解决方案,我建议使用动态字段。所以你有两个好处:

  1. 仅在添加新字段时决定fieldType
  2. 当您知道fieldType时,myfield_str:value之类的查询不会抛出任何异常,即使该字段不存在。