架构 API

使用 Schema API,您可以使用 HTTP API 管理架构的许多元素。

此 API 为每个集合(或在不运行 SolrCloud 时为核心)的 Solr 架构提供读写访问权限。支持对所有架构元素的读取访问。可以添加、删除或替换字段、动态字段、字段类型和 copyField 规则。将来的 Solr 版本将扩展写访问权限,允许修改更多架构元素。

Schema API 使用 ManagedIndexSchemaFactory 类,这是现代 Solr 版本中的默认 schema 工厂。有关为索引选择 schema 工厂的更多信息,请参阅 Schema 工厂配置 部分。

不建议手动编辑受管 schema

示例配置中名为“managed-schema.xml”的文件可能包含一条注释,建议不要手动编辑该文件。在 Schema API 出现之前,此类编辑是更改 schema 的唯一方法,并且用户可能强烈希望继续以这种方式进行更改。

不建议这样做,原因是如果稍后使用此处描述的 Schema API 进行更改,则 schema 的手动编辑可能会丢失,除非在使用 Schema API 之前重新加载核心或集合或重新启动 Solr。如果在手动编辑后始终小心重新加载或重新启动,那么进行这些编辑根本没有问题。

在 Solr 9 之前,此 xml 文件被称为 managed-schema,没有文件扩展名。

API 允许所有调用的两种输出模式:JSON 或 XML。请求完整 schema 时,还有另一种输出模式,即以 managed-schema.xml 文件本身为模型的 XML,该文件采用 XML 格式。

使用 API 修改 schema 时,将自动重新加载核心,以便更改对之后编入索引的文档立即可用。以前编入索引的文档不会自动更新 - 如果现有索引数据使用您更改的 schema 元素,则必须重新对其编制索引。

在 schema 修改后重新编制索引!

如果您修改 schema,则可能需要重新编制所有文档的索引。如果不这样做,您可能会丢失对文档的访问权限,或者无法正确解释它们,例如,在替换字段类型之后。

修改 schema 永远不会修改任何已编入索引的文档。您必须重新编制文档的索引才能对它们应用 schema 更改。更改后进行的查询和更新可能会遇到更改前不存在的错误。完全删除索引并重建它通常是修复此类错误的唯一选择。

有关重新编制索引的更多信息,请参阅 重新编制索引 部分。

本部分中的所有示例都假设您正在运行“techproducts”Solr 示例

bin/solr -e techproducts

修改 Schema

要添加、删除或替换字段、动态字段规则、复制字段规则或新字段类型,您可以向 /schema/ 端点发送 POST 请求,其中包含 JSON 格式的一系列命令来执行请求的操作。支持以下命令

  • add-field:添加一个具有您提供的参数的新字段。

  • delete-field:删除一个字段。

  • replace-field:用一个配置不同的字段替换一个现有字段。

  • add-dynamic-field:添加一个具有您提供的参数的新动态字段规则。

  • delete-dynamic-field:删除一个动态字段规则。

  • replace-dynamic-field:用一个配置不同的字段替换一个现有动态字段规则。

  • add-field-type:添加一个具有您提供的参数的新字段类型。

  • delete-field-type:删除一个字段类型。

  • replace-field-type:用一个配置不同的字段类型替换一个现有字段类型。

  • add-copy-field:添加一个新的复制字段规则。

  • delete-copy-field:删除一个复制字段规则。

这些命令可以在单独的 POST 请求中或在同一个 POST 请求中发出。命令按照指定它们的顺序执行。

在每种情况下,响应都将包括状态和处理请求的时间,但不会包括整个架构。

在使用 API 修改架构时,将自动进行核心重新加载,以便对之后索引的文档立即生效。之前索引的文档不会自动处理 - 如果它们使用了您更改的架构元素,则必须重新索引它们。

添加一个新字段

add-field 命令向您的架构添加一个新的字段定义。如果存在同名字段,则会抛出错误。

使用手动架构编辑定义字段时可用的所有属性都可以通过 API 传递。这些请求属性在 字段 部分中有详细说明。

例如,要定义一个名为“sell_by”的新存储字段,类型为“pdate”,您将 POST 以下请求

V1 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-field":{
     "name":"sell_by",
     "type":"pdate",
     "stored":true }
}' http://localhost:8983/solr/techproducts/schema

V2 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-field":{
     "name":"sell_by",
     "type":"pdate",
     "stored":true }
}' http://localhost:8983/api/collections/techproducts/schema

删除一个字段

delete-field 命令从您的架构中删除一个字段定义。如果该字段在架构中不存在,或者该字段是复制字段规则的源或目标,则会抛出错误。

例如,要删除名为“sell_by”的字段,您将 POST 以下请求

V1 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "delete-field" : { "name":"sell_by" }
}' http://localhost:8983/solr/techproducts/schema

V2 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "delete-field" : { "name":"sell_by" }
}' http://localhost:8983/api/collections/techproducts/schema

替换一个字段

replace-field 命令替换一个字段的定义。请注意,您必须提供一个字段的完整定义 - 此命令不会部分修改一个字段的定义。如果该字段在架构中不存在,则会抛出错误。

使用手动架构编辑定义字段时可用的所有属性都可以通过 API 传递。这些请求属性在 字段 部分中有详细说明。

例如,要替换现有字段“sell_by”的定义,使其类型为“date”并且不存储,您将 POST 以下请求

V1 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "replace-field":{
     "name":"sell_by",
     "type":"date",
     "stored":false }
}' http://localhost:8983/solr/techproducts/schema

V2 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "replace-field":{
     "name":"sell_by",
     "type":"date",
     "stored":false }
}' http://localhost:8983/api/collections/techproducts/schema

添加一个动态字段规则

add-dynamic-field 命令向您的架构添加一个新的动态字段规则。

编辑架构时可用的所有属性都可以通过 POST 请求传递。部分 动态字段 详细介绍了可为动态字段规则定义的所有属性。

例如,若要创建一条新的动态字段规则,其中所有以“_s”结尾的传入字段都将被存储且字段类型为“string”,可以发布类似这样的请求

V1 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-dynamic-field":{
     "name":"*_s",
     "type":"string",
     "stored":true }
}' http://localhost:8983/solr/techproducts/schema

V2 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-dynamic-field":{
     "name":"*_s",
     "type":"string",
     "stored":true }
}' http://localhost:8983/api/collections/techproducts/schema

删除动态字段规则

delete-dynamic-field 命令会从架构中删除动态字段规则。如果动态字段规则不存在于架构中,或者如果架构包含仅匹配此动态字段规则的目标或目的地的复制字段规则,则会引发错误。

例如,若要删除匹配“*_s”的动态字段规则,可以发布类似这样的请求

V1 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "delete-dynamic-field":{ "name":"*_s" }
}' http://localhost:8983/solr/techproducts/schema

V2 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "delete-dynamic-field":{ "name":"*_s" }
}' http://localhost:8983/api/collections/techproducts/schema

替换动态字段规则

replace-dynamic-field 命令会替换架构中的动态字段规则。请注意,必须提供动态字段规则的完整定义 - 此命令不会部分修改动态字段规则的定义。如果动态字段规则不存在于架构中,则会引发错误。

编辑架构时可用的所有属性都可以通过 POST 请求传递。部分 动态字段 详细介绍了可为动态字段规则定义的所有属性。

例如,若要使用字段类型为“text_general”且未存储的字段替换“*_s”动态字段规则的定义,可以发布类似这样的请求

V1 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "replace-dynamic-field":{
     "name":"*_s",
     "type":"text_general",
     "stored":false }
}' http://localhost:8983/solr/techproducts/schema

V2 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "replace-dynamic-field":{
     "name":"*_s",
     "type":"text_general",
     "stored":false }
}' http://localhost:8983/solr/techproducts/schema

添加新的字段类型

add-field-type 命令会向架构中添加新的字段类型。

手动编辑架构时可用的所有字段类型属性都可用于 POST 请求中。该命令的结构是标准字段类型定义的 JSON 映射,包括名称、类别、索引和查询分析器定义等。所有可用选项的详细信息在部分 字段类型定义和属性 中进行了描述。

例如,若要创建名为“myNewTxtField”的新字段类型,可以发布如下请求

带有单一分析的 V1 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-field-type" : {
     "name":"myNewTxtField",
     "class":"solr.TextField",
     "positionIncrementGap":"100",
     "analyzer" : {
        "charFilters":[{
           "name":"patternReplace",
           "replacement":"$1$1",
           "pattern":"([a-zA-Z])\\\\1+" }],
        "tokenizer":{
           "name":"whitespace" },
        "filters":[{
           "name":"wordDelimiter",
           "preserveOriginal":"0" }]}}
}' http://localhost:8983/solr/techproducts/schema

请注意,在此示例中,我们仅定义了一个分析器部分,该部分将应用于索引分析和查询分析。

带有两个分析器的 V1 API

如果我们想要定义单独的分析,我们将用单独的 indexAnalyzerqueryAnalyzer 部分替换上述示例中的 analyzer 部分。如下例所示

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-field-type":{
     "name":"myNewTextField",
     "class":"solr.TextField",
     "indexAnalyzer":{
        "tokenizer":{
           "name":"pathHierarchy",
           "delimiter":"/" }},
     "queryAnalyzer":{
        "tokenizer":{
           "name":"keyword" }}}
}' http://localhost:8983/solr/techproducts/schema

带有两个分析器的 V2 API

若要使用 V2 API 定义两个分析器,我们只需使用不同的端点

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-field-type":{
     "name":"myNewTextField",
     "class":"solr.TextField",
     "indexAnalyzer":{
        "tokenizer":{
           "name":"pathHierarchy",
           "delimiter":"/" }},
     "queryAnalyzer":{
        "tokenizer":{
           "name":"keyword" }}}
}' http://localhost:8983/api/collections/techproducts/schema

删除字段类型

delete-field-type 命令会从架构中删除字段类型。如果字段类型不存在于架构中,或者如果架构中的任何字段或动态字段规则使用该字段类型,则会引发错误。

例如,要删除名为“myNewTxtField”的字段类型,可以发出如下 POST 请求

V1 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "delete-field-type":{ "name":"myNewTxtField" }
}' http://localhost:8983/solr/techproducts/schema

V2 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "delete-field-type":{ "name":"myNewTxtField" }
}' http://localhost:8983/api/collections/techproducts/schema

替换字段类型

replace-field-type 命令替换架构中的字段类型。请注意,必须提供字段类型的完整定义 - 此命令不会部分修改字段类型的定义。如果字段类型在架构中不存在,则会引发错误。

手动编辑架构时可用的所有字段类型属性都可用于 POST 请求中。该命令的结构是标准字段类型定义的 JSON 映射,包括名称、类别、索引和查询分析器定义等。所有可用选项的详细信息在部分 字段类型定义和属性 中进行了描述。

例如,要替换名为“myNewTxtField”的字段类型的定义,可以发出如下 POST 请求

V1 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "replace-field-type":{
     "name":"myNewTxtField",
     "class":"solr.TextField",
     "positionIncrementGap":"100",
     "analyzer":{
        "tokenizer":{
           "name":"standard" }}}
}' http://localhost:8983/solr/techproducts/schema

V2 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "replace-field-type":{
     "name":"myNewTxtField",
     "class":"solr.TextField",
     "positionIncrementGap":"100",
     "analyzer":{
        "tokenizer":{
           "name":"standard" }}}
}' http://localhost:8983/api/collections/techproducts/schema

添加新的复制字段规则

add-copy-field 命令向架构中添加新的复制字段规则。

该命令支持的属性与通过手动编辑架构创建复制字段规则时相同,如下所示

source

必需

默认值:无

源字段。

dest

必需

默认值:无

字段或字段数组,源字段将被复制到其中。

maxChars

可选

默认值:无

要复制的字符数上限。复制字段 部分有更多详细信息。

例如,要定义将字段“shelf”复制到“location”和“catchall”字段的规则,可以 POST 以下请求

V1 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-copy-field":{
     "source":"shelf",
     "dest":[ "location", "catchall" ]}
}' http://localhost:8983/solr/techproducts/schema

V2 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-copy-field":{
     "source":"shelf",
     "dest":[ "location", "catchall" ]}
}' http://localhost:8983/api/collections/techproducts/schema

删除复制字段规则

delete-copy-field 命令从架构中删除复制字段规则。如果复制字段规则在架构中不存在,则会引发错误。

此命令需要 sourcedest 属性。

例如,要删除将字段“shelf”复制到“location”字段的规则,可以 POST 以下请求

V1 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "delete-copy-field":{ "source":"shelf", "dest":"location" }
}' http://localhost:8983/solr/techproducts/schema

V2 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "delete-copy-field":{ "source":"shelf", "dest":"location" }
}' http://localhost:8983/api/collections/techproducts/schema

单个 POST 中的多个命令

可以在单个命令中执行一个或多个添加请求。API 是事务性的,单个调用中的所有命令要么全部成功,要么全部失败。

命令按指定顺序执行。这意味着如果您想创建新的字段类型,并在同一请求中对新字段使用字段类型,则创建字段类型的请求部分必须在创建新字段的请求部分之前。类似地,由于字段必须存在才能在复制字段规则中使用,因此添加字段的请求必须在将字段用作复制字段规则的源或目标的请求之前。

用于发出多个请求的语法支持多种方法。首先,可以简单地按顺序发出命令,就像在此请求中创建新的字段类型,然后创建使用该类型的字段一样

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-field-type":{
     "name":"myNewTxtField",
     "class":"solr.TextField",
     "positionIncrementGap":"100",
     "analyzer":{
        "charFilters":[{
           "name":"patternReplace",
           "replacement":"$1$1",
           "pattern":"([a-zA-Z])\\\\1+" }],
        "tokenizer":{
           "name":"whitespace" },
        "filters":[{
           "name":"wordDelimiter",
           "preserveOriginal":"0" }]}},
   "add-field" : {
      "name":"sell_by",
      "type":"myNewTxtField",
      "stored":true }
}' http://localhost:8983/solr/techproducts/schema

或者,可以重复相同的命令,如下例所示

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-field":{
     "name":"shelf",
     "type":"myNewTxtField",
     "stored":true },
  "add-field":{
     "name":"location",
     "type":"myNewTxtField",
     "stored":true },
  "add-copy-field":{
     "source":"shelf",
      "dest":[ "location", "catchall" ]}
}' http://localhost:8983/solr/techproducts/schema

最后,可以将重复的命令作为数组发送

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-field":[
     { "name":"shelf",
       "type":"myNewTxtField",
       "stored":true },
     { "name":"location",
       "type":"myNewTxtField",
       "stored":true }]
}' http://localhost:8983/solr/techproducts/schema

副本之间的架构更改

在 SolrCloud 模式下运行时,对一个节点上的架构所做的更改将传播到集合中的所有副本。

您可以使用请求传递 updateTimeoutSecs 参数,以设置等待所有副本确认已应用架构更新的秒数。这有助于您的客户端应用程序更加健壮,因为您可以确保所有副本在限定的时间内都进行了给定的架构更改。

如果在指定时间内未达成所有副本的一致意见,则请求将失败,并且错误消息将包含有关遇到问题的副本的信息。在大多数情况下,唯一的选项是在等待一段时间后重新尝试更改。如果问题仍然存在,则您可能需要调查在应用更改时遇到问题的副本上的服务器日志。

如果您未提供 updateTimeoutSecs 参数,则接收节点在将更新持久保存到 ZooKeeper 后会立即返回,这是默认行为。所有其他副本都将异步应用更新。因此,如果不提供超时,您的客户端应用程序无法确保所有副本都已应用更改。

检索架构信息

以下端点允许您读取架构的定义方式。您可以根据需要获取整个架构,或仅获取部分架构。

要修改架构,请参阅上一部分 修改架构

检索整个架构

GET /集合/模式

检索模式参数

路径参数

集合

必需

默认值:无

集合(或核心)名称。

查询参数

查询参数应在“?”后添加到 API 请求中。

wt

可选

默认值:json

定义响应的格式。选项为 jsonxmlschema.xml

检索模式响应

输出内容

输出将包括所有字段、字段类型、动态规则和复制字段规则,格式为所请求的格式(JSON 或 XML)。模式名称和版本也包括在内。

检索模式示例

以 JSON 格式获取整个模式。

curl http://localhost:8983/solr/techproducts/schema
{
  "responseHeader":{
    "status":0,
    "QTime":5},
  "schema":{
    "name":"example",
    "version":1.5,
    "uniqueKey":"id",
    "fieldTypes":[{
        "name":"alphaOnlySort",
        "class":"solr.TextField",
        "sortMissingLast":true,
        "omitNorms":true,
        "analyzer":{
          "tokenizer":{
            "class":"solr.KeywordTokenizerFactory"},
          "filters":[{
              "class":"solr.LowerCaseFilterFactory"},
            {
              "class":"solr.TrimFilterFactory"},
            {
              "class":"solr.PatternReplaceFilterFactory",
              "replace":"all",
              "replacement":"",
              "pattern":"([^a-z])"}]}}],
    "fields":[{
        "name":"_version_",
        "type":"long",
        "indexed":true,
        "stored":true},
      {
        "name":"author",
        "type":"text_general",
        "indexed":true,
        "stored":true},
      {
        "name":"cat",
        "type":"string",
        "multiValued":true,
        "indexed":true,
        "stored":true}],
    "copyFields":[{
        "source":"author",
        "dest":"text"},
      {
        "source":"cat",
        "dest":"text"},
      {
        "source":"content",
        "dest":"text"},
      {
        "source":"author",
        "dest":"author_s"}]}}

以 XML 格式获取整个模式。

curl http://localhost:8983/solr/techproducts/schema?wt=xml
<response>
<lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">5</int>
</lst>
<lst name="schema">
  <str name="name">example</str>
  <float name="version">1.5</float>
  <str name="uniqueKey">id</str>
  <arr name="fieldTypes">
    <lst>
      <str name="name">alphaOnlySort</str>
      <str name="class">solr.TextField</str>
      <bool name="sortMissingLast">true</bool>
      <bool name="omitNorms">true</bool>
      <lst name="analyzer">
        <lst name="tokenizer">
          <str name="class">solr.KeywordTokenizerFactory</str>
        </lst>
        <arr name="filters">
          <lst>
            <str name="class">solr.LowerCaseFilterFactory</str>
          </lst>
          <lst>
            <str name="class">solr.TrimFilterFactory</str>
          </lst>
          <lst>
            <str name="class">solr.PatternReplaceFilterFactory</str>
            <str name="replace">all</str>
            <str name="replacement"/>
            <str name="pattern">([^a-z])</str>
          </lst>
        </arr>
      </lst>
    </lst>
...
    <lst>
      <str name="source">author</str>
      <str name="dest">author_s</str>
    </lst>
  </arr>
</lst>
</response>

以“schema.xml”格式获取整个模式。

curl http://localhost:8983/solr/techproducts/schema?wt=schema.xml
<schema name="example" version="1.5">
  <uniqueKey>id</uniqueKey>
  <types>
    <fieldType name="alphaOnlySort" class="solr.TextField" sortMissingLast="true" omitNorms="true">
      <analyzer>
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.TrimFilterFactory"/>
        <filter class="solr.PatternReplaceFilterFactory" replace="all" replacement="" pattern="([^a-z])"/>
      </analyzer>
    </fieldType>
...
  <copyField source="url" dest="text"/>
  <copyField source="price" dest="price_c"/>
  <copyField source="author" dest="author_s"/>
</schema>

列出字段

获取所有字段的列表。

GET /集合/模式/字段

GET /集合/模式/字段/字段名

列出字段参数

路径参数

集合

必需

默认值:无

集合(或核心)名称。

字段名

可选

默认值:无

特定字段名(如果将请求限制为单个字段)。

查询参数

查询参数可以在“?”后添加到 API 请求中。

wt

可选

默认值:json

定义响应的格式。选项为 jsonxml

fl

可选

默认值:无

要返回的一个或多个字段的逗号或空格分隔列表。如果未指定,则默认返回所有字段。

includeDynamic

可选

默认值:false

如果为 true,并且指定了 fl 查询参数或使用了 fieldname 路径参数,则匹配的动态字段将包含在响应中,并使用 dynamicBase 属性进行标识。

如果未指定 fl 查询参数或 fieldname 路径参数,则忽略 includeDynamic 查询参数。

如果为 false,则不会返回匹配的动态字段。

showDefaults

可选

默认值:false

如果为 true,则响应中将包含每个字段的字段类型的所有默认字段属性(例如,solr.TextFieldtokenized)。如果为 false,则仅包含明确指定的字段属性。

字段列表响应

输出将包括每个字段以及为每个字段定义的任何配置。为每个字段定义的配置可能有所不同,但至少会包括字段 nametype,以及它是否已 indexed 和是否已 stored

如果将 multiValued 定义为 true 或 false(很可能是 true),则也会显示该值。有关每个参数的更多信息,请参阅部分 字段

字段列表示例

V1 API

http://localhost:8983/techproducts/schema/fields

V2 API

curl -X GET "http://localhost:8983/api/collections/techproducts/schema/fields"

下面的示例输出已被截断,仅显示几个字段。

{
    "fields": [
        {
            "indexed": true,
            "name": "_version_",
            "stored": true,
            "type": "long"
        },
        {
            "indexed": true,
            "name": "author",
            "stored": true,
            "type": "text_general"
        },
        {
            "indexed": true,
            "multiValued": true,
            "name": "cat",
            "stored": true,
            "type": "string"
        },
"..."
    ],
    "responseHeader": {
        "QTime": 1,
        "status": 0
    }
}

动态字段列表

GET /collection/schema/dynamicfields

GET /collection/schema/dynamicfields/name

动态字段参数列表

路径参数

集合

必需

默认值:无

集合(或核心)名称。

name

可选

默认值:无

动态字段规则的名称(如果将请求限制为单个动态字段规则)。

查询参数

查询参数可以在“?”后添加到 API 请求中。

wt

可选

默认值:json

定义响应的格式。选项为 jsonxml

showDefaults

可选

默认值:false

如果为 true,则响应中将包含每个动态字段的字段类型的所有默认字段属性(例如,solr.TextFieldtokenized)。如果为 false,则仅包含明确指定的字段属性。

动态字段响应列表

输出将包括每个动态字段规则以及为每个规则定义的配置。为每个规则定义的配置可能有所不同,但至少会包括动态字段 nametype,以及它是否已 indexed 和是否已 stored。有关每个参数的更多信息,请参阅部分 动态字段

动态字段列表示例

获取所有动态字段声明的列表

V1 API

http://localhost:8983/techproducts/schema/dynamicfields

V2 API

curl -X GET "http://localhost:8983/api/collections/techproducts/schema/dynamicfields"

下面的示例输出已被截断。

{
    "dynamicFields": [
        {
            "indexed": true,
            "name": "*_coordinate",
            "stored": false,
            "type": "tdouble"
        },
        {
            "multiValued": true,
            "name": "ignored_*",
            "type": "ignored"
        },
        {
            "name": "random_*",
            "type": "random"
        },
        {
            "indexed": true,
            "multiValued": true,
            "name": "attr_*",
            "stored": true,
            "type": "text_general"
        },
        {
            "indexed": true,
            "multiValued": true,
            "name": "*_txt",
            "stored": true,
            "type": "text_general"
        }
"..."
    ],
    "responseHeader": {
        "QTime": 1,
        "status": 0
    }
}

字段类型列表

GET /collection/schema/fieldtypes

GET /collection/schema/fieldtypes/name

字段类型参数列表

路径参数

集合

必需

默认值:无

集合(或核心)名称。

name

可选

默认值:无

字段类型的名称(如果将请求限制为单个字段类型)。

查询参数

查询参数可以在“?”后添加到 API 请求中。

wt

可选

默认值:json

定义响应的格式。选项为 jsonxml

showDefaults

可选

默认值:false

如果为 true,则响应中将包含每个动态字段的字段类型的所有默认字段属性(例如,solr.TextFieldtokenized)。如果为 false,则仅包含明确指定的字段属性。

字段类型响应列表

输出将包括每个字段类型以及为该类型定义的任何配置。为每个类型定义的配置可能有所不同,但至少会包括字段类型nameclass。如果定义了查询或索引分析器、分词器或过滤器,它们也将与其他已定义的参数一起显示。有关如何配置各种类型的字段的详细信息,请参阅部分 字段类型定义和属性

列出字段类型示例

获取所有字段类型的列表。

V1 API

curl http://localhost:8983/solr/techproducts/schema/fieldtypes

V2 API

curl -X GET "http://localhost:8983/api/collections/techproducts/schema/fieldtypes"

以下示例输出已截断,以显示列表不同部分中的一些不同字段类型。

{
    "fieldTypes": [
        {
            "analyzer": {
                "class": "solr.TokenizerChain",
                "filters": [
                    {
                        "class": "solr.LowerCaseFilterFactory"
                    },
                    {
                        "class": "solr.TrimFilterFactory"
                    },
                    {
                        "class": "solr.PatternReplaceFilterFactory",
                        "pattern": "([^a-z])",
                        "replace": "all",
                        "replacement": ""
                    }
                ],
                "tokenizer": {
                    "class": "solr.KeywordTokenizerFactory"
                }
            },
            "class": "solr.TextField",
            "name": "alphaOnlySort",
            "omitNorms": true,
            "sortMissingLast": true
        },
        {
            "class": "solr.FloatPointField",
            "name": "float",
            "positionIncrementGap": "0"
        }]
}

列出复制字段

GET /collection/schema/copyfields

列出复制字段参数

路径参数

集合

必需

默认值:无

集合(或核心)名称。

查询参数

查询参数可以在“?”后添加到 API 请求中。

wt

可选

默认值:json

定义响应的格式。选项为 jsonxml

source.fl

可选

默认值:无

要包含在响应中的一个或多个 copyField 源字段的逗号或空格分隔列表。具有所有其他源字段的 CopyField 指令将从响应中排除。如果未指定,所有 copyField 都将包含在响应中。

dest.fl

可选

默认值:无

要包含在响应中的一个或多个 copyField 目标字段的逗号或空格分隔列表。具有所有其他dest字段的 CopyField 指令将被排除。如果未指定,所有 copyField 都将包含在响应中。

列出复制字段响应

输出将包括在schema.xml中定义的每个复制字段规则的sourcedest(目标)。有关复制字段的详细信息,请参阅部分 复制字段

列出复制字段示例

获取所有 copyFields 的列表。

V1 API

curl http://localhost:8983/solr/techproducts/schema/copyfields

V2 API

curl -X GET "http://localhost:8983/api/collections/techproducts/schema/copyfields"

以下示例输出已截断为前几个复制定义。

{
    "copyFields": [
        {
            "dest": "text",
            "source": "author"
        },
        {
            "dest": "text",
            "source": "cat"
        },
        {
            "dest": "text",
            "source": "content"
        },
        {
            "dest": "text",
            "source": "content_type"
        },
    ],
    "responseHeader": {
        "QTime": 3,
        "status": 0
    }
}

显示架构名称

GET /collection/schema/name

显示架构参数

路径参数

集合

必需

默认值:无

集合(或核心)名称。

查询参数

查询参数可以在“?”后添加到 API 请求中。

wt

可选

默认值:json

定义响应的格式。选项为 jsonxml

显示架构响应

输出将只是赋予架构的名称。

显示架构示例

获取架构名称。

V1 API

curl http://localhost:8983/solr/techproducts/schema/name

V2 API

curl -X GET "http://localhost:8983/api/collections/techproducts/schema/name"
{
  "responseHeader":{
    "status":0,
    "QTime":1},
  "name":"example"}

显示架构版本

GET /collection/schema/version

显示架构版本参数

路径参数

集合

必需

默认值:无

集合(或核心)名称。

查询参数

查询参数可以在“?”后添加到 API 请求中。

wt

可选

默认值:json

定义响应的格式。选项为 jsonxml

显示架构版本响应

输出将仅仅是正在使用的架构版本。

显示架构版本示例

获取架构版本

V1 API

curl http://localhost:8983/solr/techproducts/schema/version

V2 API

curl -X GET "http://localhost:8983/api/collections/techproducts/schema/version"
{
  "responseHeader":{
    "status":0,
    "QTime":2},
  "version":1.5}

列出唯一键

GET /集合/schema/uniquekey

列出唯一键参数

路径参数

集合

必需

默认值:无

集合(或核心)名称。

查询参数

查询参数可以在“?”后添加到 API 请求中。

wt

可选

默认值:json

定义响应的格式。选项为 jsonxml

列出唯一键响应

输出将仅仅包括被定义为索引的唯一键的字段名称。

列出唯一键示例

列出唯一键。

V1 API

curl http://localhost:8983/solr/techproducts/schema/uniquekey

V2 API

curl -X GET "http://localhost:8983/api/collections/techproducts/schema/uniquekey"
{
  "responseHeader":{
    "status":0,
    "QTime":2},
  "uniqueKey":"id"}

显示全局相似性

GET /集合/schema/similarity

显示全局相似性参数

路径参数

集合

必需

默认值:无

集合(或核心)名称。

查询参数

查询参数可以在“?”后添加到 API 请求中。

wt

可选

默认值:json

定义响应的格式。选项为 jsonxml

显示全局相似性响应

输出将包括已定义的全局相似性的类名称(如果存在)。

显示全局相似性示例

获取相似性实现。

V1 API

curl http://localhost:8983/solr/techproducts/schema/similarity

V2 API

curl -X GET "http://localhost:8983/api/collections/techproducts/schema/similarity"
{
  "responseHeader":{
    "status":0,
    "QTime":1},
  "similarity":{
    "class":"org.apache.solr.search.similarities.DefaultSimilarityFactory"}}

管理资源数据

托管资源 REST API 为任何 Solr 插件提供了一种机制,用于公开应支持 CRUD(创建、读取、更新、删除)操作的资源。根据在架构中配置的字段类型和分析器,可能存在其他 /schema/ REST API 路径。