Solr的无模式功能如何工作?如何将其还原为经典架构?

时间:2015-04-23 09:53:18

标签: solr solr5

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

这是否是一种好的做法?有没有办法禁用它?

2 个答案:

答案 0 :(得分:31)

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"/>并取消注释
  • 搜索引用<initParams>的{​​{1}}元素并注释掉整个add-unknown-fields-to-the-schema

<initParams>...</initParams>重命名为managed-schema,您就完成了。

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

这是一个好习惯吗?何时使用?

这取决于你想要什么。如果您想强制执行特定的文档结构(例如,为了确保所有文档都是&#34;格式良好&#34;根据您的定义),那么您希望使用经典模式管理。

另一方面,如果您不了解文档结构的内容,那么您可能希望使用无模式功能。

限制

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

schema.xml

如果您尝试索引下一个文档,那么您将收到错误:

{"name":"John Doe"}

这是因为在第一种情况下,字段{"name": { "first": "Daniel", "second": "Dennett" } } 的类型为字符串,而在第二种情况下,它是一个对象。

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

答案 1 :(得分:1)

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

bin/solr start -e schemaless

上面的代码片段将以无模式模式启动Solr,如果不这样做,它将照常工作。

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