Solr原子更新更改字段名

Solr原子更新更改字段名,solr,atomic,Solr,Atomic,我是新来Solr的。我尝试进行原子更新,.json更新文件不仅改变了字段值,而且字段名也变成了“fieldname.set”,例如,“price”变成了“price.set”。 任何帮助都将不胜感激 # /usr/local/solr/bin/solr version 8.5.1 # curl http://localhost:8983/solr/books/select?q=id%3A0371558727 "response":{"numFound":1,"s

我是新来Solr的。我尝试进行原子更新,.json更新文件不仅改变了字段值,而且字段名也变成了“fieldname.set”,例如,“price”变成了“price.set”。 任何帮助都将不胜感激

    # /usr/local/solr/bin/solr version
    8.5.1

    # curl http://localhost:8983/solr/books/select?q=id%3A0371558727
    "response":{"numFound":1,"start":0,"docs":[
      {
        "id":"0371558727",
        "price":19.0,
        "_version_":1667214802265571328}]
    }

    # cat test.json
    [
    {"id":"0371558727",
     "price":{"set":19.95}
    }
    ]

    # /usr/local/solr/bin/post -p 8983 -c books test.json

    # curl http://localhost:8983/solr/books/select?q=id%3A0371558727
    "response":{"numFound":1,"start":0,"docs":[
      {
        "id":"0371558727",
        "price.set":[19.95],
        "_version_":1667214933776924672}]
    }

post工具将JSON文件直接发布到JSON更新处理程序,该处理程序将JSON文档映射到一个内部结构,其中
分隔层次结构的每个级别

相反,请正确设置更新的格式,并使用curl将其发布到常规的
/update
端点:

curl http://localhost:8983/solr/books/update -d '[
  {"id":"0371558727", "price":{"set":19.95}}
]'
您不必一次发出一个调用,您可以为每个HTTP请求将它们批处理为多个更新:

curl http://localhost:8983/solr/books/update -d '[
  {"id":"0371558727", "price":{"set":19.95}},
  {"id":"0371558728", "price":{"set":14.95}},
  {"id":"0371558729", "price":{"set":12.95}},
  {"id":"0371558726", "price":{"set":16.95}}
]'

发布更新后,您可能必须在提交时通过在URL中包含
?commit=true
,或者如果执行批更新,在您通过明确提交将所有更新提交到索引后(例如,仅通过调用带有
?commit=true
且未附加任何文档的URL)发布提交.

post工具将JSON文件直接发布到JSON更新处理程序,该处理程序将JSON文档映射到一个内部结构,其中,
将层次结构的每个级别分隔开来

相反,请正确设置更新的格式,并使用curl将其发布到常规的
/update
端点:

curl http://localhost:8983/solr/books/update -d '[
  {"id":"0371558727", "price":{"set":19.95}}
]'
您不必一次发出一个调用,您可以为每个HTTP请求将它们批处理为多个更新:

curl http://localhost:8983/solr/books/update -d '[
  {"id":"0371558727", "price":{"set":19.95}},
  {"id":"0371558728", "price":{"set":14.95}},
  {"id":"0371558729", "price":{"set":12.95}},
  {"id":"0371558726", "price":{"set":16.95}}
]'

发布更新后,您可能必须在提交时通过在URL中包含
?commit=true
,或者如果执行批更新,在您通过明确提交将所有更新提交到索引后(例如,仅通过调用带有
?commit=true
且未附加任何文档的URL)发布提交.

solr用户的邮件成员对此有一个很好的解决方案,在/bin/post中添加“-format solr”

bin/post -format solr -p 8983 -c books test.json

solr用户邮件成员对此有一个很好的解决方案,在/bin/post中添加“-format solr”

bin/post -format solr -p 8983 -c books test.json

post
工具可能将JSON文件直接发布到JSON更新处理程序,该处理程序将JSON文档映射到一个内部结构,
将层次结构的每一层分隔开来。尝试使用curl将其显式发布到常规的
/update
端点:
curlhttp://localhost:8983/solr/books/update -d'[{“id”:“0371558727”,“price”:{“set”:19.95}}]
@MatsLindh感谢您的回复。post it to/update运行良好,但我有数百万条记录,我无法通过调用curl数百万次来更新,这将非常缓慢。您可以批量更新到
/update
-无需仅引用单个文档提交请求。我在下面添加了一个示例。
post
工具可能将JSON文件直接发布到JSON更新处理程序,该处理程序将JSON文档映射到一个内部结构,其中
分隔了层次结构的每一层。尝试使用curl将其显式发布到常规的
/update
端点:
curlhttp://localhost:8983/solr/books/update -d'[{“id”:“0371558727”,“price”:{“set”:19.95}}]
@MatsLindh感谢您的回复。post it to/update运行良好,但我有数百万条记录,我无法通过调用curl数百万次来更新,这将非常缓慢。您可以批量更新到
/update
-无需仅引用单个文档提交请求。我在下面添加了一个示例。谢谢!我找到了另一个解决方案,将“-format solr”添加到/bin/postThank!我找到了另一个解决方案,在/bin/post中添加“-format solr”