UpdateXmlMessages

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:

  1. XML Messages for Updating a Solr Index
    1. The Update Schema
      1. add/update
        1. Optional attributes for "add"
        2. Optional attributes on "doc"
        3. Optional attributes for "field"
      2. "commit" and "optimize"
        1. Optional attributes for "commit" and "optimize"
      3. "rollback"
      4. "delete" by ID and by Query
        1. Optional attributes for "delete"
      5. Updating a Data Record via curl
      6. Updating a Data Record via GET

The Update Schema

(Not to be confused with schema.xml.)

add/update

Example:

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

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

Optional attributes for "add"

The defaults for overwritePending and overwriteCommitted are linked to allowDups such that those defaults make more sense:

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:

"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>/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>/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

last edited 2009-05-28 00:34:11 by JohnBennett