windows - 如何从 solr 中的模式中删除所有属性?

标签 windows curl solr

从solr中删除所有文档是

curl http://localhost:8983/solr/trans/update?commit=true -d "<delete><query>*:*</query></delete>"

向模式添加(静态)属性是

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

删除一个属性是

curl -X POST -H 'Content-type:application/json' -d '{ "delete-field":{"name":"trans"}}' http://arteika:8983/solr/trans/schema

有没有办法从架构中删除所有属性?

最佳答案

至少在 Schema API 的 6.6 版和当前的 7.5 版中,您可以在单个帖子中传递多个命令(分别参见 6.67.5 文档)。有多种可接受的格式,但最直观的一种(我认为)只是为您要执行的操作传递一个数组:

curl -X POST -H 'Content-type: application/json' -d '{
  "delete-field": [
    {"name": "trans"},
    {"name": "other_field"}
  ]
}' 'http://arteika:8983/solr/trans/schema'

所以。我们如何获取要删除的字段的名称?这可以通过查询架构来完成:

curl -X GET -H 'Content-type: application/json' 'http://arteika:8983/solr/trans/schema'

特别是响应中 schema 对象中的 copyFieldsdynamicFieldsfields 键。

我自动清除所有复制字段规则、动态字段规则和字段如下。您当然可以使用任何可用的脚本。我使用的是 Python 3(可能适用于 Python 2,我没有测试过)。

import json
import requests

# load schema information
api = 'http://arteika:8983/solr/trans/schema'
r = requests.get(api)

# delete copy field rules
names = [(o['source'], o['dest']) for o in r.json()['schema']['copyFields']]
payload = {'delete-copy-field': [{'source': name[0], 'dest': name[1]} for name in names]}
requests.post(api, data = json.dumps(payload),
                   headers = {'Content-type': 'application/json'})

# delete dynamic fields
names = [o['name'] for o in r.json()['schema']['dynamicFields']]
payload = {'delete-dynamic-field': [{'name': name} for name in names]}
requests.post(api, data = json.dumps(payload),
                   headers = {'Content-type': 'application/json'})

# delete fields
names = [o['name'] for o in r.json()['schema']['fields']]
payload = {'delete-field': [{'name': name} for name in names]}
requests.post(api, data = json.dumps(payload),
                   headers = {'Content-type': 'application/json'})

请注意:我一开始收到状态 400 响应,带有 null 错误消息。很难弄清楚如何解决这些问题,所以我分享了对我有用的方法。将 solrconfig.xmlupdateRequestProcessorChain 的默认值更改为 false (default="${update.autoCreateFields:false}") 并重新启动 Solr 服务使这些错误对我来说消失了。我删除的字段是自动创建的,这可能与此有关。

关于windows - 如何从 solr 中的模式中删除所有属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49113181/

相关文章:

windows - 如何在不重新启动的情况下更新 Windows 资源管理器的 shell 扩展

c++ - 如何在 Windows 上获取 ISO 8601 格式的日期时间?

java - Google App Engine/Java SDK 在哪里存储记录和 blob?

php - 查看 Paypal API - 什么是 cURL?

memory - 增加 Jetty/Solr 堆空间

java - Solr:缺少内容流,Magento:重新索引时出错

windows - 如何从批处理文件中只删除空目录

linux - bash cURL POST 不起作用?

shell - 从shell脚本中的curl请求中提取访问 token

java - Solr 按距离和新鲜度排序