【问题标题】:Querying fields in a schemaless Solr throws "undefined field" error在无模式 Solr 中查询字段会引发“未定义字段”错误
【发布时间】:2017-10-17 09:30:04
【问题描述】:

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

这种方式违背了无模式模式的目的。有解决办法吗?

【问题讨论】:

    标签: solr


    【解决方案1】:

    我想要的第一个前提是 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 不幸出错时会发生什么?您没有其他手动修改架构的方法,这几乎肯定需要完整的重新索引。

    当然,我不希望生产架构发生变化,因为在更新期间以某种未知方式到达了新字段。

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

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

    【讨论】:

    • 这就是我最终所做的。无模式 Solr 在生产中的缺点是什么?
    • 我已经更新了我的答案,试图解释无模式 Solr 在生产中的缺点。
    猜你喜欢
    • 2016-04-08
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多