Schema API

Schema API 允许您使用 HTTP API 来管理模式的许多元素。

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

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

不鼓励手动编辑托管模式

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

不鼓励这样做的原因是,如果稍后使用此处描述的 Schema API 进行更改,则模式的手动编辑可能会丢失,除非在使用 Schema API 之前重新加载核心或集合或重新启动 Solr。如果注意在手动编辑后始终重新加载或重新启动,则进行这些编辑完全没有问题。

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

该 API 允许所有调用有两种输出模式:JSON 或 XML。当请求完整模式时,还有另一种输出模式,它是 XML,模仿 managed-schema.xml 文件本身,该文件是 XML 格式。

当使用 API 修改 schema 时,为了使更改对之后索引的文档立即生效,核心将自动重新加载。之前索引的文档不会自动更新 - 如果现有索引数据使用了您更改的 schema 元素,则必须重新索引。

修改 schema 后重新索引!

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

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

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

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

bin/solr start -e techproducts

修改 Schema

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

  • 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 请求中发出。命令按照它们指定的顺序执行。

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

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

添加新字段

add-field 命令将新的字段定义添加到您的 schema。如果存在同名字段,则会抛出错误。

通过 API 传递手动编辑 schema 时可用的所有属性。这些请求属性在 字段 部分中详细描述。

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

  • V1 API

  • V2 API

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

删除字段

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

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

  • V1 API

  • V2 API

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

替换字段

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

通过 API 传递手动编辑 schema 时可用的所有属性。这些请求属性在 字段 部分中详细描述。

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

  • V1 API

  • V2 API

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

添加动态字段规则

add-dynamic-field 命令将新的动态字段规则添加到您的 schema。

编辑 schema 时可用的所有属性都可以通过 POST 请求传递。动态字段 部分提供了有关可以为动态字段规则定义的所有属性的详细信息。

例如,要创建一个新的动态字段规则,其中所有以 “_s” 结尾的传入字段都将被存储并具有 “string” 字段类型,您可以 POST 如下请求

  • V1 API

  • V2 API

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

删除动态字段规则

delete-dynamic-field 命令从您的 schema 中删除动态字段规则。如果动态字段规则不存在于 schema 中,或者 schema 包含一个目标或目标仅匹配此动态字段规则的复制字段规则,则会抛出错误。

例如,要删除与 “*_s” 匹配的动态字段规则,您可以 POST 如下请求

  • V1 API

  • V2 API

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

替换动态字段规则

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

编辑 schema 时可用的所有属性都可以通过 POST 请求传递。动态字段 部分提供了有关可以为动态字段规则定义的所有属性的详细信息。

例如,要将 “*_s” 动态字段规则的定义替换为字段类型为 “text_general” 且不存储的定义,您可以 POST 如下请求

  • V1 API

  • V2 API

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

添加新的字段类型

add-field-type 命令将新的字段类型添加到您的 schema。

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

例如,要创建一个名为 “myNewTxtField” 的新字段类型,您可以 POST 如下请求

  • 使用单一分析的 V1 API

  • 使用两个分析器的 V1 API

  • 使用两个分析器的 V2 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" }]}}
}' https://127.0.0.1:8983/solr/techproducts/schema

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

如果我们想定义单独的分析,我们将用单独的 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" }}}
}' https://127.0.0.1:8983/solr/techproducts/schema

要使用 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" }}}
}' https://127.0.0.1:8983/api/collections/techproducts/schema

删除字段类型

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

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

  • V1 API

  • V2 API

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

替换字段类型

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

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

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

  • V1 API

  • 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" }}}
}' https://127.0.0.1:8983/solr/techproducts/schema
curl -X POST -H 'Content-type:application/json' --data-binary '{
  "replace-field-type":{
     "name":"myNewTxtField",
     "class":"solr.TextField",
     "positionIncrementGap":"100",
     "analyzer":{
        "tokenizer":{
           "name":"standard" }}}
}' https://127.0.0.1:8983/api/collections/techproducts/schema

添加新的复制字段规则

add-copy-field 命令将新的复制字段规则添加到您的 schema。

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

source

必需

默认:无

源字段。

dest

必需

默认:无

源字段将被复制到的一个字段或字段数组。

maxChars

可选

默认:无

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

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

  • V1 API

  • V2 API

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

删除复制字段规则

delete-copy-field 命令从您的 schema 中删除复制字段规则。如果复制字段规则不存在于 schema 中,则会抛出错误。

此命令需要 sourcedest 属性。

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

  • V1 API

  • V2 API

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "delete-copy-field":{ "source":"shelf", "dest":"location" }
}' https://127.0.0.1:8983/solr/techproducts/schema
curl -X POST -H 'Content-type:application/json' --data-binary '{
  "delete-copy-field":{ "source":"shelf", "dest":"location" }
}' https://127.0.0.1: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 }
}' https://127.0.0.1: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" ]}
}' https://127.0.0.1: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 }]
}' https://127.0.0.1:8983/solr/techproducts/schema

副本之间的 Schema 更改

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

您可以在请求中传递 updateTimeoutSecs 参数,以设置等待所有副本确认它们已应用 schema 更新的秒数。这有助于您的客户端应用程序更加健壮,因为您可以确保所有副本在定义的时间内都具有给定的 schema 更改。

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

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

检索 Schema 信息

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

要修改模式,请参阅上一节 修改模式

检索整个模式

GET /collection/schema

检索模式参数

路径参数

collection

必需

默认:无

集合(或核心)的名称。

查询参数

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

wt

可选

默认值:json

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

检索模式响应

输出内容

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

检索模式示例

以 JSON 格式获取整个模式。

curl https://127.0.0.1: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 https://127.0.0.1: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 https://127.0.0.1:8983/solr/techproducts/schema?wt=schema.xml
<schema name="example" version="1.7">
  <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>
  ...
  </types>
  <copyField source="url" dest="text"/>
  <copyField source="price" dest="price_c"/>
  <copyField source="author" dest="author_s"/>
</schema>

列出字段

获取所有字段的列表。

GET /collection/schema/fields

GET /collection/schema/fields/fieldname

列出字段参数

路径参数

collection

必需

默认:无

集合(或核心)的名称。

fieldname

可选

默认:无

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

查询参数

查询参数可以添加到 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

  • V2 API

https://127.0.0.1:8983/solr/techproducts/schema/fields
curl -X GET "https://127.0.0.1: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

列出动态字段参数

路径参数

collection

必需

默认:无

集合(或核心)的名称。

name

可选

默认:无

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

查询参数

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

wt

可选

默认值:json

定义响应的格式。选项包括 jsonxml

showDefaults

可选

默认值:false

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

列出动态字段响应

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

列出动态字段示例

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

  • V1 API

  • V2 API

https://127.0.0.1:8983/techproducts/schema/dynamicfields
curl -X GET "https://127.0.0.1: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

列出字段类型参数

路径参数

collection

必需

默认:无

集合(或核心)的名称。

name

可选

默认:无

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

查询参数

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

wt

可选

默认值:json

定义响应的格式。选项包括 jsonxml

showDefaults

可选

默认值:false

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

列出字段类型响应

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

列出字段类型示例

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

  • V1 API

  • V2 API

curl https://127.0.0.1:8983/solr/techproducts/schema/fieldtypes
curl -X GET "https://127.0.0.1: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

列出复制字段参数

路径参数

collection

必需

默认:无

集合(或核心)的名称。

查询参数

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

wt

可选

默认值:json

定义响应的格式。选项包括 jsonxml

source.fl

可选

默认:无

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

dest.fl

可选

默认:无

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

列出复制字段响应

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

列出复制字段示例

获取所有 copyField 的列表。

  • V1 API

  • V2 API

curl https://127.0.0.1:8983/solr/techproducts/schema/copyfields
curl -X GET "https://127.0.0.1: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

显示模式参数

路径参数

collection

必需

默认:无

集合(或核心)的名称。

查询参数

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

wt

可选

默认值:json

定义响应的格式。选项包括 jsonxml

显示模式响应

输出将只是给模式的名称。

显示模式示例

获取模式名称。

  • V1 API

  • V2 API

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

显示模式版本

GET /collection/schema/version

显示模式版本参数

路径参数

collection

必需

默认:无

集合(或核心)的名称。

查询参数

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

wt

可选

默认值:json

定义响应的格式。选项包括 jsonxml

显示模式版本响应

输出将只是正在使用的模式版本。

显示模式版本示例

获取模式版本

  • V1 API

  • V2 API

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

列出 UniqueKey

GET /collection/schema/uniquekey

列出 UniqueKey 参数

路径参数

collection

必需

默认:无

集合(或核心)的名称。

查询参数

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

wt

可选

默认值:json

定义响应的格式。选项包括 jsonxml

列出 UniqueKey 响应

输出将仅包括定义为索引的 uniqueKey 的字段名称。

列出 UniqueKey 示例

列出 uniqueKey。

  • V1 API

  • V2 API

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

显示全局相似度

GET /collection/schema/similarity

显示全局相似度参数

路径参数

collection

必需

默认:无

集合(或核心)的名称。

查询参数

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

wt

可选

默认值:json

定义响应的格式。选项包括 jsonxml

显示全局相似度响应

输出将包括定义的全局相似度(如果有)的类名称。

显示全局相似度示例

获取相似度实现。

  • V1 API

  • V2 API

curl https://127.0.0.1:8983/solr/techproducts/schema/similarity
curl -X GET "https://127.0.0.1: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 路径。