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 文件被称为 |
该 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
请注意,在此示例中,我们仅定义了一个将应用于索引分析和查询分析的单一分析器部分。
如果我们想定义单独的分析,我们将用单独的 indexAnalyzer
和 queryAnalyzer
部分替换上述示例中的 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 中,则会抛出错误。
此命令需要 source
和 dest
属性。
例如,要删除将 “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
定义响应的格式。选项包括
json
、xml
或schema.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
定义响应的格式。选项包括
json
或xml
。 fl
-
可选
默认:无
要返回的一个或多个字段的逗号或空格分隔列表。如果未指定,则默认返回所有字段。
includeDynamic
-
可选
默认值:
false
如果为
true
,并且指定了fl
查询参数或使用了fieldname
路径参数,则匹配的动态字段将包含在响应中,并使用dynamicBase
属性标识。如果既未指定
fl
查询参数,也未使用fieldname
路径参数,则includeDynamic
查询参数将被忽略。如果为
false
,则不会返回匹配的动态字段。 showDefaults
-
可选
默认值:
false
如果为
true
,则每个字段的字段类型的所有默认字段属性都将包含在响应中(例如,solr.TextField
的tokenized
)。如果为false
,则仅包含显式指定的字段属性。
列出字段响应
输出将包括每个字段和为每个字段定义的任何配置。每个字段的定义配置可能会有所不同,但至少会包括字段 name
、type
、它是否被 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
定义响应的格式。选项包括
json
或xml
。 showDefaults
-
可选
默认值:
false
如果为
true
,则每个动态字段的字段类型的所有默认字段属性都将包含在响应中(例如,solr.TextField
的tokenized
)。如果为false
,则仅包含显式指定的字段属性。
列出动态字段响应
输出将包括每个动态字段规则和为每个规则定义的配置。每个规则的定义配置可能会有所不同,但至少会包括动态字段 name
、type
、它是否被 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
定义响应的格式。选项包括
json
或xml
。 showDefaults
-
可选
默认值:
false
如果为
true
,则每个动态字段的字段类型的所有默认字段属性都将包含在响应中(例如,solr.TextField
的tokenized
)。如果为false
,则仅包含显式指定的字段属性。
列出字段类型响应
输出将包括每个字段类型和为该类型定义的任何配置。每个类型的定义配置可能会有所不同,但至少会包括字段类型 name
和 class
。如果定义了查询或索引分析器、分词器或过滤器,则也会显示这些内容以及其他定义的参数。有关如何配置各种类型的字段的更多信息,请参阅 字段类型定义和属性 部分。
列出字段类型示例
获取所有字段类型的列表。
-
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
定义响应的格式。选项包括
json
或xml
。 source.fl
-
可选
默认:无
要包含在响应中的一个或多个 copyField 源字段的逗号或空格分隔列表。具有所有其他源字段的 CopyField 指令将从响应中排除。如果未指定,则响应中将包含所有 copyField。
dest.fl
-
可选
默认:无
要包含在响应中的一个或多个 copyField 目标字段的逗号或空格分隔列表。具有所有其他
dest
字段的 CopyField 指令将被排除。如果未指定,则响应中将包含所有 copyField。
列出复制字段响应
输出将包括在 schema.xml
中定义的每个复制字段规则的 source
和 dest
(目标)。有关复制字段的更多信息,请参阅 复制字段 部分。
列出复制字段示例
获取所有 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
显示模式版本
GET /collection/schema/version
列出 UniqueKey
GET /collection/schema/uniquekey
显示全局相似度
GET /collection/schema/similarity
显示全局相似度参数
路径参数
collection
-
必需
默认:无
集合(或核心)的名称。
查询参数
查询参数可以添加到 API 请求中的“?”之后。
wt
-
可选
默认值:
json
定义响应的格式。选项包括
json
或xml
。
显示全局相似度示例
获取相似度实现。
-
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 路径。