Exercise 3: Index Your Own Data
For this last exercise, work with a dataset of your choice. This can be files on your local hard drive, a set of data you have worked with before, or maybe a sample of the data you intend to index to Solr for your production application.
This exercise is intended to get you thinking about what you will need to do for your application:
What sorts of data do you need to index?
What will you need to do to prepare Solr for your data (such as, create specific fields, set up copy fields, determine analysis rules, etc.)
What kinds of search options do you want to provide to users?
How much testing will you need to do to ensure everything works the way you expect?
Before you get started, create a new collection, named whatever you’d like. In this example, the collection will be named "localDocs"; replace that name with whatever name you choose if you want to.
$ bin/solr create -c localDocs -s 2 -rf 2
Again, as we saw from Exercise 2 above, this will use the
_default configset and all the schemaless features it provides.
As we noted previously, this may cause problems when we index our data.
You may need to iterate on indexing a few times before you get the schema right.
Solr has lots of ways to index data. Choose one of the approaches below and try it out with your system:
- Local Files with
If you have a local directory of files, the Post Tool (
bin/post) can index a directory of files. We saw this in action in our first exercise.
We used only JSON, XML and CSV in our exercises, but the Post Tool can also handle HTML, PDF, Microsoft Office formats (such as MS Word), plain text, and more.
In this example, assume there is a directory named "Documents" locally. To index it, we would issue a command like this (correcting the collection name after the
-cparameter as needed):
$ bin/post -c localDocs ~/Documents
You may get errors as it works through your documents. These might be caused by the field guessing, or the file type may not be supported. Indexing content such as this demonstrates the need to plan Solr for your data, which requires understanding it and perhaps also some trial and error.
- Documents Screen
Use the Admin UI Documents Screen (at http://localhost:8983/solr/#/localDocs/documents) to paste in a document to be indexed, or select
Document Builderfrom the
Document Typedropdown to build a document one field at a time. Click on the Submit Document button below the form to index your document.
You may notice that even if you index content in this tutorial more than once, it does not duplicate the results found.
This is because the example Solr schema (a file named either
schema.xml) specifies a
uniqueKey field called
Whenever you POST commands to Solr to add a document with the same value for the
uniqueKey as an existing document, it automatically replaces it for you.
You can see that has happened by looking at the values for
maxDoc in the core-specific Overview section of the Solr Admin UI.
numDocs represents the number of searchable documents in the index (and will be larger than the number of XML, JSON, or CSV files since some files contained more than one document).
maxDoc value may be larger as the
maxDoc count includes logically deleted documents that have not yet been physically removed from the index.
You can re-post the sample files over and over again as much as you want and
numDocs will never increase, because the new documents will constantly be replacing the old.
Go ahead and edit any of the existing example data files, change some of the data, and re-run the PostTool (
You’ll see your changes reflected in subsequent searches.
If you need to iterate a few times to get your schema right, you may want to delete documents to clear out the collection and try again. Note, however, that merely removing documents doesn’t change the underlying field definitions. Essentially, this will allow you to reindex your data after making changes to fields for your needs.
You can delete data by POSTing a delete command to the update URL and specifying the value of the document’s unique key field, or a query that matches multiple documents (be careful with that one!).
We can use
bin/post to delete documents also if we structure the request properly.
Execute the following command to delete a specific document:
$ bin/post -c localDocs -d "<delete><id>SP2514N</id></delete>"
To delete all documents, you can use "delete-by-query" command like:
$ bin/post -c localDocs -d "<delete><query>*:*</query></delete>"
You can also modify the above to only delete documents that match a specific query.
At this point, you’re ready to start working on your own.
Jump ahead to the overall wrap up when you’re ready to stop Solr and remove all the examples you worked with and start fresh.