XML Messages for Updating a Solr Index

Solr accepts POSTed XML messages that Add/Update, Commit, Delete, and Delete by query, using the url /update. Here is the XML syntax that Solr expects to see:

The Update Schema

(Not to be confused with schema.xml.)

add/update

Example:

Subversion contains many complex examples of <add> document messages.

Note: multiple documents may be specified in a single <add> command.

Optional attributes for "add"

Optional attributes on "doc"

Optional attributes for "field"

Example of "add" with optional attributes:

"commit" and "optimize"

Example:

Optional attributes for "commit" and "optimize"

Example of "commit" and "optimize" with optional attributes:

Passing commit parameters as part of the URL

Update handlers can also get commit related parameters as part of the update URL. This example adds a small test document and causes a commit to happen after:

curl http://localhost:8983/solr/update?commit=true -H "Content-Type: text/xml" --data-binary '<add><doc><field name="id">testdoc</field></doc></add>'

This example will cause the index to be optimized down to at most 10 segments, but won't wait around until it's done (waitFlush=false):

curl 'http://localhost:8983/solr/update?optimize=true&maxSegments=10&waitFlush=false'

"rollback"

<!> Solr1.4

Example:

The rollback command rollbacks all add/deletes made to the index since the last commit. It neither calls any event listeners nor creates a new searcher.

"delete" by ID and by Query

Delete by id deletes the document with the specified ID. (ID here means the value of the uniqueKey field declared in the schema (in these examples, employeeId).

Delete by query deletes all the documents that match the specified query.

Example:

In Solr 1.2, delete query is much less efficient than delete by id, because Solr has to do much of the commit logic each time it receives a delete by query request. In Solr 1.3, however, most of the overhead will have been removed.

<!> Solr1.4 Both delete by id and delete by query can be specified at the same time.

Example:

Optional attributes for "delete"

Updating a Data Record via curl

You can use curl to send any of the above commands. For example:

curl http://<hostname>:<port>/solr/update -H "Content-Type: text/xml" --data-binary '<add>
<doc boost="2.5"> <field name="employeeId">05991</field>
<field name="office" boost="2.0">Bridgewater</field> </doc> </add>'

curl http://<hostname>:<port>/solr/update -H "Content-Type: text/xml" --data-binary '<commit waitFlush="false" waitSearcher="false"/>'

Until a commit has been issued, you will not see any of the data in searches either on the master or the slave. After a commit has been issued, you will see the results on the master, then after a snapshot has been pulled by the slave, you will see it there also.

Updating a Data Record via GET

Short update requests can also be sent using a GET request (needs to be url-encoded) like:

http://localhost:8983/solr/update?stream.body=%3Cdelete%3E%3Cquery%3Eoffice:Bridgewater%3C/query%3E%3C/delete%3E
http://localhost:8983/solr/update?stream.body=%3Ccommit/%3E

UpdateXmlMessages (last edited 2009-10-28 23:03:58 by YonikSeeley)