Update 2011-09-16: a better solution now is the Missing Link http task, which provides a one-stop full-featured http implementation for Ant.

Erik Hatcher, Steve Loughran and Thorsten Scherler on the solr-usr user list helped me to a method for posting batches of files into Solr from Ant. To start with, you need the ant-contrib package and the Jakarta commons-codec package; put them on Ant’s classpath, most conveniently in Ant’s lib directory.

Then, in your build.xml, declare the ant-contrib tasks:

<taskdef resource="net/sf/antcontrib/antlib.xml"/>

Now you’re ready to post some files. We use the foreach task to iterate through a bunch of files, and the postMethod task to send them up.

<target name="update" description="update all solr files"> <foreach target="dopost" param="filename"> <path> <fileset dir="path/to/records"> <include name="*.xml"/> </fileset> </path> </foreach> </target> <target name="dopost" description="do post"> <postMethod url="http://localhost:8983/solr/update"> <!-- note: filename contains absolute path --> <file path="${filename}" contentType="text/xml;charset=utf-8"/> </postMethod> </target>

Run ant update to send all the files up to Solr (or to another REST-oriented service). The update task passes each file to the dopost task in the filename parameter.

Why not set up targets to commit and optimize as well:

<target name="commit" description="commit"> <postmethod url="http://localhost:8983/solr/update"> <text value="<commit/>"/> </postmethod> </target> <target name="optimize" description="optimize"> <postmethod url="http://localhost:8983/solr/update"> <text value="<optimize/>"/> </postmethod> </target>

This will come in very handy in my Ant-based approach to large xslt projects.