如何在Solr schema.xml中包含另一个XML文件?

时间:2013-06-06 18:00:44

标签: solr

我有许多不同的核心,每个核心都有自己的架构,但它们都共享相同的字段类型。我想删除字段类型声明的重复,并在我的schema.xml文件中执行类似的操作:

<?xml version="1.0" encoding="UTF-8" ?>
<schema name="foo" version="1.5">
  <fields>
      <field name="_version_" ...
      <field name="id" ...
      ...
  </fields>
  <uniqueKey>id</uniqueKey>
  <include "/path/to/field_types.xml">
</schema>

但是我没有在文档中看到任何机制来实现这一点。我发现有一篇文章指的是这个:

    <xi:include href="/path/to/field_types.xml" />

但是这给了我一个启动错误:The prefix "xi" for element "xi:include" is not bound.

任何人都知道如何执行这种原始包含?

2 个答案:

答案 0 :(得分:7)

从过去的Solr问题 - SOLR-3087开始,看起来<xi:include>是正确的语法,您只需要内联包含xi名称空间引用。

<?xml version="1.0" encoding="UTF-8" ?>
<schema name="foo" version="1.5">
  <fields>
      <field name="_version_" ...
      <field name="id" ...
      ...
  </fields>
  <uniqueKey>id</uniqueKey>
  <xi:include href="/path/to/field_types.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
</schema>

答案 1 :(得分:2)

此问题的另一个干净解决方案是将资源添加为外部实体:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE schema
[
    <!ENTITY schemafieldtypes SYSTEM "schemafieldtypes.xml">
]>

然后,在xml中,您可以随处添加:

&schemafieldtypes;