gpt4 book ai didi

Solr:是否可以仅使用 Schema API 更改特定字段的日期格式?

转载 作者:行者123 更新时间:2023-12-04 17:56:57 25 4
gpt4 key购买 nike

我想指定日期格式dd/MM/yyyy对于类型为 date 的字段.我知道以下方法:

  1. 编辑schema.xml并添加 datetimeformat="dd/MM/yyyy"属性为 <field />涉及标签,但我还没有测试过。或者,
  2. 编辑solrconfig.xml并添加 <str>dd/MM/yyyy</str>标记到类处理器 solr.ParseDateFieldUpdateProcessorFactory .我确信这行得通,因为我亲自测试过。

我想使用托管架构和架构 API 而不是编辑 schema.xml .这在独立和 Cloud Solr 中都很方便和有用。

为了添加一个date领域,我做如下:

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

并编辑一些字段属性,例如 stored属性(property),我愿意:

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

如果我尝试设置 "datetimeformat":"dd/MM/yyyy"在创建或编辑字段期间,出现错误。

是否可以 Schema API 编辑日期格式而不编辑任何*.xml文件?

更新

我试过这个命令但没有成功:

curl http://localhost:8983/solr/test/config -H 'Content-type:application/json' -d '
{
"update-updateprocessor" :
{
"class": "solr.ParseDateFieldUpdateProcessorFactory",
"name":"solr.ParseDateFieldUpdateProcessorFactory",
"format":["dd/MM/yyyy"]
}
}'

问题是solr.ParseDateFieldUpdateProcessorFactory的原始定义在 solrconfig.xml是:

<processor class="solr.ParseDateFieldUpdateProcessorFactory">
<arr name="format">
<str>yyyy-MM-dd'T'HH:mm:ss.SSSZ</str>
<str>yyyy-MM-dd'T'HH:mm:ss,SSSZ</str>
<str>yyyy-MM-dd'T'HH:mm:ss.SSS</str>
<str>yyyy-MM-dd'T'HH:mm:ss,SSS</str>
<str>yyyy-MM-dd'T'HH:mm:ssZ</str>
<str>yyyy-MM-dd'T'HH:mm:ss</str>
<str>yyyy-MM-dd'T'HH:mmZ</str>
<str>yyyy-MM-dd'T'HH:mm</str>
<str>yyyy-MM-dd HH:mm:ss.SSSZ</str>
<str>yyyy-MM-dd HH:mm:ss,SSSZ</str>
<str>yyyy-MM-dd HH:mm:ss.SSS</str>
<str>yyyy-MM-dd HH:mm:ss,SSS</str>
<str>yyyy-MM-dd HH:mm:ssZ</str>
<str>yyyy-MM-dd HH:mm:ss</str>
<str>yyyy-MM-dd HH:mmZ</str>
<str>yyyy-MM-dd HH:mm</str>
<str>yyyy-MM-dd</str>
</arr>
</processor>

而且它没有 name属性。如果我省略 "name" JSON 请求中的属性,Solr 抛出错误 'name' is a required field .我尝试了各种组合,但都没有用:"name":"solr.ParseDateFieldUpdateProcessorFactory" , "name":"ParseDateFieldUpdateProcessorFactory" , "name":"" .

更新 2

正在运行 curl http://localhost:8983/solr/test/config返回一个 JSON 对象。这是其中的一部分:

{
...
"updateRequestProcessorChain":[{
"name":"add-unknown-fields-to-the-schema",
"":[{"class":"solr.UUIDUpdateProcessorFactory"},
{"class":"solr.LogUpdateProcessorFactory"},
{"class":"solr.DistributedUpdateProcessorFactory"},
{"class":"solr.RemoveBlankFieldUpdateProcessorFactory"},
{
"class":"solr.FieldNameMutatingUpdateProcessorFactory",
"pattern":"[^\\w-\\.]",
"replacement":"_"},
{"class":"solr.ParseBooleanFieldUpdateProcessorFactory"},
{"class":"solr.ParseLongFieldUpdateProcessorFactory"},
{"class":"solr.ParseDoubleFieldUpdateProcessorFactory"},
{"class":"solr.ParseDateFieldUpdateProcessorFactory"},
{"class":"solr.AddSchemaFieldsUpdateProcessorFactory"},
{"class":"solr.RunUpdateProcessorFactory"}]}],
...
}

这意味着solr.ParseDateFieldUpdateProcessorFactory类型 updateRequestProcessorChain . documentation状态:

The Config API does not let you create or edit <updateRequestProcessorChain> elements. However, it is possible to create <updateProcessor> entries and can use them by name to create a chain.

这意味着无法将特定日期格式添加到现有的 solr.ParseDateFieldUpdateProcessorFactory使用配置 API。我应该创建一个自定义更新处理器来执行我想要的操作,因此使用 add-updateprocessor具有适当参数的 API。

最佳答案

在处理可怕的 Solr 文档之后,我找到了解决方案。 documentation状态:

The Config API does not let you create or edit <updateRequestProcessorChain> elements. However, it is possible to create <updateProcessor> entries and can use them by name to create a chain.

[ ... ]

You can use this directly in your request by adding a parameter in the <updateRequestProcessorChain> for the specific update processor called processor=firstFld.

这意味着我必须添加自定义更新处理器并在使用 /update显式调用它处理程序。所以:

curl http://localhost:8983/solr/test/config -H 'Content-type:application/json' -d '
{
"add-updateprocessor" :
{
"name" : "myCustomDateUpdateProcessor",
"class": "solr.ParseDateFieldUpdateProcessorFactory",
"format":["dd/MM/yyyy"]
}
}'

将数据载入test通过 /update/csv 收集处理程序,使用此命令:

curl http://localhost:8983/solr/test/update/csv?processor=myCustomDateUpdateProcessor&commit=true --data-binary @file.csv -H 'Content-type:text/plain; charset=utf-8'

注意 processor=myCustomDateUpdateProcessor 的存在, 其中myCustomDateUpdateProcessor是我之前创建的更新处理器。处理器存储在 configoverlay.json 中而不是 solrconfig.xml .

关于Solr:是否可以仅使用 Schema API 更改特定字段的日期格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39750073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com