Solr 错误创建核心:在架构中找不到 fieldType [x]

Posted

技术标签:

【中文标题】Solr 错误创建核心:在架构中找不到 fieldType [x]【英文标题】:Solr error creating core: fieldType [x] not found in the schema 【发布时间】:2015-09-28 00:25:57 【问题描述】:

我正在尝试使用我自己的 schema.xml 运行 Solr 核心,但 Solr(版本 5.2.1)一直抱怨缺少 fieldType 元素,这些元素甚至不在我的 fields 定义中。

org.apache.solr.common.SolrException: fieldType 'booleans' not found in the schema

每当我添加一个“缺失”fieldtype 时,就会弹出另一个错误,抱怨另一个 fieldType 缺失,例如 longs 等,直到我将它们全部添加并无错误地接受架构。

现在我为什么必须提供这些 fieldtype 元素,而这些元素没有用处?

config.xml 我有:

<schemaFactory class="ClassicIndexSchemaFactory"/>

这是我的schema.xml

<schema name="collections" version="1.5">

<fields>
    <field name="id_object" type="string" indexed="true" stored="true" />
    <field name="id_organization" type="string" indexed="true" stored="true"  />
    <field name="title" type="string" indexed="true" stored="true"  />
    <field name="artist" type="string" indexed="true" stored="true"  />
    <field name="searchname" type="string" indexed="true" stored="true"  />
    <field name="technique_group" type="string" indexed="true" stored="true"  />
    <field name="technique" type="string" indexed="true" stored="true"  />
    <field name="color_type" type="string" indexed="true" stored="true"  />
    <field name="color" type="string" indexed="true" stored="true"  />
    <field name="subject" type="string" indexed="true" stored="true"  />
    <field name="height" type="tint" indexed="true" stored="true"  />
    <field name="width" type="tint" indexed="true" stored="true"  />
    <field name="depth" type="tint" indexed="true" stored="true"  />
    <field name="price_sale" type="tfloat" indexed="true" stored="true"  />
    <field name="price_rental" type="tfloat" indexed="true" stored="true"  />
    <field name="price_rental_with_savings" type="tfloat" indexed="true" stored="true"  />
    <field name="savings_portion" type="tfloat" indexed="true" stored="true"  />
    <field name="year" type="tint" indexed="true" stored="true"  />
    <field name="is_for_rent" type="boolean" indexed="true" stored="true"  />
    <field name="is_for_sale" type="boolean" indexed="true" stored="true"  />
    <field name="status" type="string" indexed="true" stored="true"  />
    <field name="shipment" type="tfloat" indexed="true" stored="true"  />
    <field name="timestamp" type="tdate" indexed="true" stored="true" default="NOW" />

    <!-- catch all field, must be multiValued if any of its source fields is -->
    <field name="quick_search" type="text" indexed="true" stored="false" />

    <!-- mandatory -->
    <field name="_version_" type="tlong" indexed="true" stored="true" />

</fields>

<uniqueKey>id_object</uniqueKey>

<copyField source="id_object" dest="quick_search" />
<copyField source="title" dest="quick_search" />
<copyField source="artist" dest="quick_search" />
<copyField source="searchname" dest="quick_search" />
<copyField source="technique_group" dest="quick_search" />
<copyField source="technique" dest="quick_search" />
<copyField source="color_type" dest="quick_search" />
<copyField source="color" dest="quick_search" />
<copyField source="subject" dest="quick_search" />

<types>
    <fieldtype name="string" class="solr.StrField" />
    <fieldtype name="boolean" class="solr.BoolField" />
    <fieldtype name="tint" class="solr.TrieIntField" />
    <fieldtype name="tlong" class="solr.TrieLongField" />
    <fieldtype name="tfloat" class="solr.TrieFloatField" />
    <fieldtype name="tdate" class="solr.TrieDateField" />
    <fieldtype name="text" class="solr.TextField"/>
</types>

</schema>

那里没有一个 multiValued 字段。尽管如此,我尝试单独为每个字段显式设置multiValued='false',但无济于事。即使我将整个架构剥离到只有少数 String 字段,它仍然会产生该错误。

我很有信心我的schema.xml 没问题,但也许某处的某些设置应该告诉 Solr 放轻松。

【问题讨论】:

【参考方案1】:

不确定这是否是首选方式,但注释掉config.xml 中的solr.AddSchemaFieldsUpdateProcessorFactory 部分似乎可以解决问题。

<!--
<processor class="solr.AddSchemaFieldsUpdateProcessorFactory">
  <str name="defaultFieldType">strings</str>
  <lst name="typeMapping">
    <str name="valueClass">java.lang.Boolean</str>
    <str name="fieldType">booleans</str>
  </lst>
  <lst name="typeMapping">
    <str name="valueClass">java.util.Date</str>
    <str name="fieldType">tdates</str>
  </lst>
  <lst name="typeMapping">
    <str name="valueClass">java.lang.Long</str>
    <str name="valueClass">java.lang.Integer</str>
    <str name="fieldType">tlongs</str>
  </lst>
  <lst name="typeMapping">
    <str name="valueClass">java.lang.Number</str>
    <str name="fieldType">tdoubles</str>
  </lst>
</processor>
-->

【讨论】:

在我的 solr 5.2.1 实例中,我在 solrconfig.xml 中找到了此部分。评论它也对我有用。谢谢 使用默认的 ckan 模式,也适用于 mer 工作。谢谢!【参考方案2】:
<lst name="typeMapping">
    <str name="valueClass">java.lang.Boolean</str>
    <str name="fieldType">booleans</str>
</lst>

在这里您需要将“布尔值”更正为“布尔值”。

<lst name="typeMapping">
    <str name="valueClass">java.lang.Boolean</str>
    <str name="fieldType">boolean</str>
</lst>

然后它会工作..

或者

另一种解决方案是注释掉solrconfig.xml 中的&lt;updateRequestProcessorChain name="add-unknown-fields-to-the-schema"&gt; 部分。

【讨论】:

这看起来是一个比仅仅评论整个事情更优雅的解决方案。为了使其工作,我必须使用 ManagedIndexSchemaFactory 而不是 ClassicIndexSchemaFactory,设置 mutable=true 并使用 schema.xml 以外的名称 Solr 6.3.0 中也可以。需要的部分可以在solrconfig.xml 中找到。顺便说一句,我还需要从tdatestlongstdoubles 中删除s。我从basic_configs 取了solrconfig.xml

以上是关于Solr 错误创建核心:在架构中找不到 fieldType [x]的主要内容,如果未能解决你的问题,请参考以下文章

在 BigQuery 视图中找不到字段

在此模型中找不到名为“Book”的实体。 ios核心数据错误?

Apple Mach-O-Linker 错误:从(行)引用的变量在架构 x86-64 中找不到

在架构 + 链接器命令中找不到符号失败,退出代码为 1

收到错误:尝试创建/迁移/运行时在路径中找不到“nmake”

Solr实现 并集式多值复杂 过滤查询的权限