【问题标题】:How does Solr's schema-less feature work? How to revert it to classic schema?Solr 的无模式功能如何工作?如何将其还原为经典模式?
【发布时间】:2015-07-01 10:14:23
【问题描述】:

刚刚发现 Solr 5 不需要预定义架构文件,它会根据正在执行的索引生成架构。我想知道这在后台是如何工作的?

这是否是一个好习惯?有什么办法可以关闭吗?

【问题讨论】:

    标签: solr solr5


    【解决方案1】:

    这就是 Solr 中所谓的无模式模式。我不知道内部细节,它是如何实现的等等。

    bin/solr start -e schemaless
    

    上面的这个 sn-p 将以无模式模式启动 Solr,如果你不这样做,它将照常工作。

    有关无模式的更多信息,请查看此处 - https://cwiki.apache.org/confluence/display/solr/Schemaless+Mode

    【讨论】:

    • 您好,您能帮我了解如何禁用无模式模式吗?我认为它是默认的,自动启动的。
    • 照常运行,或者使用经典模式工厂
    • 我像往常一样运行它,但它仍然运行无模式模式。知道如何使用经典模式工厂吗?请注意,我在 Windows 上运行它
    【解决方案2】:

    The schemaless feature has been in Solr since version 4.3。但它可能只是现在更稳定为a concurrency issue with it was fixed in 4.10

    它也被称为托管模式。当您将 Solr 配置为使用托管模式时,Solr 使用特殊的 UpdateRequestProcessor 来拦截文档索引请求并猜测字段类型。

    Solr 从您的schema.xml 文件开始,并创建一个默认名为managed-schema 的新文件来存储所有推断的架构信息。 Solr 在检测到架构更改时会自动覆盖此文件。

    如果您想更改架构,则应使用Schema API。另请参阅Schemaless Mode documentation

    如何将 Solr 托管架构更改为经典架构

    停止 Solr:$ bin/solr stop

    转到server/solr/mycore/conf,其中“mycore”是您的核心/集合的名称。

    编辑solrconfig.xml:

    • 搜索 <schemaFactory class="ManagedIndexSchemaFactory"> 并评论整个元素
    • 搜索 <schemaFactory class="ClassicIndexSchemaFactory"/> 并取消注释
    • 搜索引用add-unknown-fields-to-the-schema<initParams> 元素并注释掉整个<initParams>...</initParams>

    managed-schema 重命名为schema.xml,就完成了。

    您现在可以再次启动 Solr:$ bin/solr start,转到 http://localhost:8983/solr/#/mycore/documents 并检查 Solr 现在是否拒绝为具有尚未在 schema.xml 中指定的新字段的文档编制索引。

    这是一个好习惯吗?什么时候使用?

    这取决于你想要什么。如果您想强制执行特定的文档结构(例如,确保所有文档根据您的定义“格式正确”),那么您需要使用经典的模式管理。

    另一方面,如果您不知道文档结构是什么,那么您可能想要使用无模式功能。

    限制

    虽然它被称为无模式,但您可以索引的结构种类是有限的。顺便说一下,这对于 Solr 和 Elasticsearch 来说都是如此。例如,如果您首先索引此文档:

    {"name":"John Doe"}
    

    如果你接下来尝试索引一个类似的文档,你会得到一个错误:

    {"name": {
       "first": "Daniel",
       "second": "Dennett"
       }
    }
    

    这是因为在第一种情况下,字段name 是字符串类型,而在第二种情况下,它是一个对象。

    如果您想使用超出这些限制的索引,那么您可以使用SIREn - 它是一个open source 半结构化信息检索引擎,作为 Solr 和 Elasticsearch 的插件实现。 (免责声明:我曾在开发 SIRen 的公司工作

    【讨论】:

    • 感谢您的回答。你能帮我理解如何禁用无模式模式吗?任何例子都会很棒!
    • @Krunal 通过将托管架构更改回经典架构的步骤更新了答案
    • 感谢您更新!我将很快对其进行测试并在此处更新结果。
    • 我继续向我的客户推荐他们使用非托管架构。原因是我倾向于版本控制 solr 主目录。 schema.xml、solrconfig 等文件 IMO 应被视为开发工件。
    • 这是我在 solr 中读到的关于这个主题的最佳答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 2015-07-31
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 2016-03-06
    相关资源
    最近更新 更多