| # Solr Quick Start |
| |
| ## Overview |
| |
| This document covers getting Solr up and running, ingesting a variety of data sources into multiple collections, |
| and getting a feel for the Solr administrative and search interfaces. |
| |
| ## Requirements |
| |
| To follow along with this tutorial, you will need... |
| |
| 1. To meet the [system requirements](SYSTEM_REQUIREMENTS.html) |
| 2. An Apache Solr release. This tutorial was written using Apache Solr 5.0.0. |
| |
| ## Getting Started |
| |
| Please run the browser showing this tutorial and the Solr server on the same machine so tutorial links will correctly |
| point to your Solr server. |
| |
| Begin by unzipping the Solr release and changing your working directory to the subdirectory where Solr was installed. |
| Note that the base directory name may vary with the version of Solr downloaded. For example, with a shell in UNIX, |
| Cygwin, or MacOS: |
| |
| /:$ ls solr* |
| solr-5.0.0.zip |
| /:$ unzip -q solr-5.0.0.zip |
| /:$ cd solr-5.0.0/ |
| |
| To launch Solr, run: `bin/solr start -e cloud -noprompt` |
| |
| /solr-5.0.0:$ bin/solr start -e cloud -noprompt |
| |
| Welcome to the SolrCloud example! |
| |
| |
| Starting up 2 Solr nodes for your example SolrCloud cluster. |
| ... |
| |
| Started Solr server on port 8983 (pid=8404). Happy searching! |
| ... |
| |
| Started Solr server on port 7574 (pid=8549). Happy searching! |
| ... |
| |
| SolrCloud example running, please visit http://localhost:8983/solr |
| |
| /solr-5.0.0:$ _ |
| |
| You can see that the Solr is running by loading the Solr Admin UI in your web browser: <http://localhost:8983/solr/>. |
| This is the main starting point for administering Solr. |
| |
| Solr will now be running two "nodes", one on port 7574 and one on port 8983. There is one collection created |
| automatically, `gettingstarted`, a two shard collection, each with two replicas. |
| The [Cloud tab](http://localhost:8983/solr/#/~cloud) in the Admin UI diagrams the collection nicely: |
| |
| <img alt="Solr Quick Start: SolrCloud diagram" class="float-right" width="50%" src="images/quickstart-solrcloud.png" /> |
| |
| ## Indexing Data |
| |
| Your Solr server is up and running, but it doesn't contain any data. The Solr install includes the `bin/post`* tool in |
| order to facilitate getting various types of documents easily into Solr from the start. We'll be |
| using this tool for the indexing examples below. |
| |
| You'll need a command shell to run these examples, rooted in the Solr install directory; the shell from where you |
| launched Solr works just fine. |
| |
| * NOTE: Currently the `bin/post` tool does not have a comparable Windows script, but the underlying Java program invoked |
| is available. See the [Post Tool, Windows section](https://cwiki.apache.org/confluence/display/solr/Post+Tool#PostTool-Windows) |
| for details. |
| |
| ### Indexing a directory of "rich" files |
| |
| Let's first index local "rich" files including HTML, PDF, Microsoft Office formats (such as MS Word), plain text and |
| many other formats. `bin/post` features the ability to crawl a directory of files, optionally recursively even, |
| sending the raw content of each file into Solr for extraction and indexing. A Solr install includes a `docs/` |
| subdirectory, so that makes a convenient set of (mostly) HTML files built-in to start with. |
| |
| bin/post -c gettingstarted docs/ |
| |
| Here's what it'll look like: |
| |
| /solr-5.0.0:$ bin/post -c gettingstarted docs/ |
| java -classpath /solr-5.0.0/dist/solr-core-5.0.0.jar -Dauto=yes -Dc=gettingstarted -Ddata=files -Drecursive=yes org.apache.solr.util.SimplePostTool docs/ |
| SimplePostTool version 5.0.0 |
| Posting files to [base] url http://localhost:8983/solr/gettingstarted/update... |
| Entering auto mode. File endings considered are xml,json,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log |
| Entering recursive mode, max depth=999, delay=0s |
| Indexing directory docs (3 files, depth=0) |
| POSTing file index.html (text/html) to [base]/extract |
| POSTing file quickstart.html (text/html) to [base]/extract |
| POSTing file SYSTEM_REQUIREMENTS.html (text/html) to [base]/extract |
| Indexing directory docs/changes (1 files, depth=1) |
| POSTing file Changes.html (text/html) to [base]/extract |
| ... |
| 3248 files indexed. |
| COMMITting Solr index changes to http://localhost:8983/solr/gettingstarted/update... |
| Time spent: 0:00:41.660 |
| |
| |
| The command-line breaks down as follows: |
| |
| * `-c gettingstarted`: name of the collection to index into |
| * `docs/`: a relative path of the Solr install `docs/` directory |
| |
| You have now indexed thousands of documents into the `gettingstarted` collection in Solr and committed these changes. |
| You can search for "solr" by loading the Admin UI [Query tab](#admin-collection), enter "solr" in the `q` param |
| (replacing `*:*`, which matches all documents), and "Execute Query". See the [Searching](#searching) |
| section below for more information. |
| |
| To index your own data, re-run the directory indexing command pointed to your own directory of documents. For example, |
| on a Mac instead of `docs/` try `~/Documents/` or `~/Desktop/`! You may want to start from a clean, empty system |
| again rather than have your content in addition to the Solr `docs/` directory; see the Cleanup section [below](#cleanup) |
| for how to get back to a clean starting point. |
| |
| ### Indexing Solr XML |
| |
| Solr supports indexing structured content in a variety of incoming formats. The historically predominant format for |
| getting structured content into Solr has been [Solr XML](https://cwiki.apache.org/confluence/display/solr/Uploading+Data+with+Index+Handlers#UploadingDatawithIndexHandlers-XMLFormattedIndexUpdates). |
| Many Solr indexers have been coded to process domain content into Solr XML output, generally HTTP POSTed directly to |
| Solr's `/update` endpoint. |
| |
| <a name="techproducts"/> |
| Solr's install includes a handful of Solr XML formatted files with example data (mostly mocked tech product data). |
| NOTE: This tech product data as a more domain-specific configuration, including schema and browse UI. The `bin/solr` |
| script includes built-in support for this by running `bin/solr start -e techproducts` which not only starts Solr but |
| also then indexes this data too (be sure to `bin/solr stop -all` before trying it out). |
| beforehand). |
| |
| Using `bin/post`, index the example Solr XML files in `example/exampledocs/`: |
| |
| bin/post -c gettingstarted example/exampledocs/*.xml |
| |
| Here's what you'll see: |
| |
| /solr-5.0.0:$ bin/post -c gettingstarted example/exampledocs/*.xml |
| java -classpath /solr-5.0.0/dist/solr-core-5.0.0-SNAPSHOT.jar -Dauto=yes -Dc=gettingstarted -Ddata=files org.apache.solr.util.SimplePostTool example/exampledocs/gb18030-example.xml ... |
| SimplePostTool version 5.0.0 |
| Posting files to [base] url http://localhost:8983/solr/gettingstarted/update... |
| Entering auto mode. File endings considered are xml,json,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log |
| POSTing file gb18030-example.xml (application/xml) to [base] |
| POSTing file hd.xml (application/xml) to [base] |
| POSTing file ipod_other.xml (application/xml) to [base] |
| POSTing file ipod_video.xml (application/xml) to [base] |
| POSTing file manufacturers.xml (application/xml) to [base] |
| POSTing file mem.xml (application/xml) to [base] |
| POSTing file money.xml (application/xml) to [base] |
| POSTing file monitor.xml (application/xml) to [base] |
| POSTing file monitor2.xml (application/xml) to [base] |
| POSTing file mp500.xml (application/xml) to [base] |
| POSTing file sd500.xml (application/xml) to [base] |
| POSTing file solr.xml (application/xml) to [base] |
| POSTing file utf8-example.xml (application/xml) to [base] |
| POSTing file vidcard.xml (application/xml) to [base] |
| 14 files indexed. |
| COMMITting Solr index changes to http://localhost:8983/solr/gettingstarted/update... |
| Time spent: 0:00:01.857 |
| |
| ...and now you can search for all sorts of things using the default [Solr Query Syntax](https://cwiki.apache.org/confluence/display/solr/The+Standard+Query+Parser#TheStandardQueryParser-SpecifyingTermsfortheStandardQueryParser) |
| (a superset of the Lucene query syntax)... |
| |
| NOTE: |
| You can browse the documents indexed at <http://localhost:8983/solr/gettingstarted/browse>. The `/browse` UI allows getting |
| a feel for how Solr's technical capabilities can be worked with in a familiar, though a bit rough and prototypical, |
| interactive HTML view. (The `/browse` view defaults to assuming the `gettingstarted` schema and data are a catch-all mix |
| of structured XML, JSON, CSV example data, and unstructured rich documents. Your own data may not look ideal at first, |
| though the `/browse` templates are customizable.) |
| |
| ### Indexing JSON |
| |
| Solr supports indexing JSON, either arbitrary structured JSON or "Solr JSON" (which is similar to Solr XML). |
| |
| Solr includes a small sample Solr JSON file to illustrate this capability. Again using `bin/post`, index the |
| sample JSON file: |
| |
| bin/post -c gettingstarted example/exampledocs/books.json |
| |
| You'll see: |
| |
| /solr-5.0.0:$ bin/post -c gettingstarted example/exampledocs/books.json |
| java -classpath /solr-5.0.0/dist/solr-core-5.0.0-SNAPSHOT.jar -Dauto=yes -Dc=gettingstarted -Ddata=files org.apache.solr.util.SimplePostTool example/exampledocs/books.json |
| SimplePostTool version 5.0.0 |
| Posting files to [base] url http://localhost:8983/solr/gettingstarted/update... |
| Entering auto mode. File endings considered are xml,json,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log |
| POSTing file books.json (application/json) to [base] |
| 1 files indexed. |
| COMMITting Solr index changes to http://localhost:8983/solr/gettingstarted/update... |
| Time spent: 0:00:00.377 |
| |
| |
| To flatten (and/or split) and index arbitrary structured JSON, a topic beyond this quick start guide, check out |
| [Transforming and Indexing Custom JSON data](https://cwiki.apache.org/confluence/display/solr/Uploading+Data+with+Index+Handlers#UploadingDatawithIndexHandlers-TransformingandIndexingcustomJSONdata). |
| |
| ### Indexing CSV (Comma/Column Separated Values) |
| |
| A great conduit of data into Solr is via CSV, especially when the documents are homogeneous by all having the |
| same set of fields. CSV can be conveniently exported from a spreadsheet such as Excel, or exported from databases such |
| as MySQL. When getting started with Solr, it can often be easiest to get your structured data into CSV format and then |
| index that into Solr rather than a more sophisticated single step operation. |
| |
| Using `bin/post` index the included example CSV file: |
| |
| bin/post -c gettingstarted example/exampledocs/books.csv |
| |
| In your terminal you'll see: |
| |
| /solr-5.0.0:$ bin/post -c gettingstarted example/exampledocs/books.csv |
| java -classpath /solr-5.0.0/dist/solr-core-5.0.0-SNAPSHOT.jar -Dauto=yes -Dc=gettingstarted -Ddata=files org.apache.solr.util.SimplePostTool example/exampledocs/books.csv |
| SimplePostTool version 5.0.0 |
| Posting files to [base] url http://localhost:8983/solr/gettingstarted/update... |
| Entering auto mode. File endings considered are xml,json,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log |
| POSTing file books.csv (text/csv) to [base] |
| 1 files indexed. |
| COMMITting Solr index changes to http://localhost:8983/solr/gettingstarted/update... |
| Time spent: 0:00:00.099 |
| |
| |
| ### Other indexing techniques |
| |
| * Import records from a database using the [Data Import Handler (DIH)](https://cwiki.apache.org/confluence/display/solr/Uploading+Structured+Data+Store+Data+with+the+Data+Import+Handler). |
| |
| * Use [SolrJ](https://cwiki.apache.org/confluence/display/solr/Using+SolrJ) from JVM-based languages or |
| other [Solr clients](https://cwiki.apache.org/confluence/display/solr/Client+APIs) to programatically create documents |
| to send to Solr. |
| |
| * Use the Admin UI core-specific Documents tab to paste in a document to be |
| indexed, or select `Document Builder` from the `Document Type` dropdown to build a document one field at a time. |
| Click on the `Submit Document` button below the form to index your document. |
| |
| *** |
| |
| ## Updating Data |
| |
| You may notice that even if you index content in this guide more than once, it does not duplicate the results found. |
| This is because the example `schema.xml` specifies a "`uniqueKey`" field called "`id`". 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 that has happened by looking at the values for `numDocs` and `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). The 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 SimplePostTool command. |
| You'll see your changes reflected in subsequent searches. |
| |
| ## Deleting Data |
| |
| 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!). Since these commands are smaller, we |
| specify them right on the command line rather than reference a JSON or XML file. |
| |
| Execute the following command to delete a specific document: |
| |
| bin/post -c gettingstarted -d "<delete><id>SP2514N</id></delete>" |
| |
| |
| <a name="searching"/> |
| ## Searching |
| |
| Solr can be queried via REST clients, cURL, wget, Chrome POSTMAN, etc., as well as via the native clients available for |
| many programming languages. |
| |
| The Solr Admin UI includes a query builder interface - see the `gettingstarted` query tab at <http://localhost:8983/solr/#/gettingstarted_shard1_replica1/query>. |
| If you click the `Execute Query` button without changing anything in the form, you'll get 10 documents in JSON |
| format (`*:*` in the `q` param matches all documents): |
| |
| <img style="border:1px solid #ccc" width="50%" src="images/quickstart-query-screen.png" alt="Solr Quick Start: gettingstarted Query tab" class="float-right"/> |
| |
| The URL sent by the Admin UI to Solr is shown in light grey near the top right of the above screenshot - if you click on |
| it, your browser will show you the raw response. To use cURL, give the same URL in quotes on the `curl` command line: |
| |
| curl "http://localhost:8983/solr/gettingstarted/select?q=*%3A*&wt=json&indent=true" |
| |
| In the above URL, the "`:`" in "`q=*:*`" has been URL-encoded as "`%3A`", but since "`:`" has no reserved purpose in the |
| query component of the URL (after the "`?`"), you don't need to URL encode it. So the following also works: |
| |
| curl "http://localhost:8983/solr/gettingstarted/select?q=*:*&wt=json&indent=true" |
| |
| ### Basics |
| |
| #### Search for a single term |
| |
| To search for a term, give it as the `q` param value in the core-specific Solr Admin UI Query section, replace `*:*` |
| with the term you want to find. To search for "foundation": |
| |
| curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation" |
| |
| You'll see: |
| |
| /solr-5.0.0$ curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation" |
| { |
| "responseHeader":{ |
| "status":0, |
| "QTime":0, |
| "params":{ |
| "indent":"true", |
| "q":"foundation", |
| "wt":"json"}}, |
| "response":{"numFound":2812,"start":0,"docs":[ |
| { |
| "id":"0553293354", |
| "cat":["book"], |
| "name":"Foundation", |
| ... |
| |
| The response indicates that there are 2,812 hits (`"numFound":2812`), of which the first 10 were returned, since by |
| default `start=0` and `rows=10`. You can specify these params to page through results, where `start` is the |
| (zero-based) position of the first result to return, and `rows` is the page size. |
| |
| To restrict fields returned in the response, use the `fl` param, which takes a comma-separated list of field names. |
| E.g. to only return the `id` field: |
| |
| curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation&fl=id" |
| |
| `q=foundation` matches nearly all of the docs we've indexed, since most of the files under `docs/` contain |
| "The Apache Software Foundation". To restrict search to a particular field, use the syntax "`q=field:value`", |
| e.g. to search for `foundation` only in the `name` field: |
| |
| curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=name:foundation" |
| |
| The above request returns only one document (`"numFound":1`) - from the response: |
| |
| ... |
| "response":{"numFound":1,"start":0,"docs":[ |
| { |
| "id":"0553293354", |
| "cat":["book"], |
| "name":"Foundation", |
| ... |
| |
| #### Phrase search |
| |
| To search for a multi-term phrase, enclose it in double quotes: `q="multiple terms here"`. E.g. to search for |
| "CAS latency" - note that the space between terms must be converted to "`+`" in a URL (the Admin UI will handle URL |
| encoding for you automatically): |
| |
| curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=\"CAS+latency\"" |
| |
| You'll get back: |
| |
| { |
| "responseHeader":{ |
| "status":0, |
| "QTime":0, |
| "params":{ |
| "indent":"true", |
| "q":"\"CAS latency\"", |
| "wt":"json"}}, |
| "response":{"numFound":2,"start":0,"docs":[ |
| { |
| "id":"VDBDB1A16", |
| "name":"A-DATA V-Series 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - OEM", |
| "manu":"A-DATA Technology Inc.", |
| "manu_id_s":"corsair", |
| "cat":["electronics", "memory"], |
| "features":["CAS latency 3,\t 2.7v"], |
| ... |
| |
| #### Combining searches |
| |
| By default, when you search for multiple terms and/or phrases in a single query, Solr will only require that one of them |
| is present in order for a document to match. Documents containing more terms will be sorted higher in the results list. |
| |
| You can require that a term or phrase is present by prefixing it with a "`+`"; conversely, to disallow the presence of a |
| term or phrase, prefix it with a "`-`". |
| |
| To find documents that contain both terms "`one`" and "`three`", enter `+one +three` in the `q` param in the |
| core-specific Admin UI Query tab. Because the "`+`" character has a reserved purpose in URLs |
| (encoding the space character), you must URL encode it for `curl` as "`%2B`": |
| |
| curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=%2Bone+%2Bthree" |
| |
| To search for documents that contain the term "`two`" but **don't** contain the term "`one`", enter `+two -one` in the |
| `q` param in the Admin UI. Again, URL encode "`+`" as "`%2B`": |
| |
| curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=%2Btwo+-one" |
| |
| #### In depth |
| |
| For more Solr search options, see the Solr Reference Guide's [Searching](https://cwiki.apache.org/confluence/display/solr/Searching) |
| section. |
| |
| |
| ### Faceting |
| |
| One of Solr's most popular features is faceting. Faceting allows the search results to be arranged into subsets (or |
| buckets or categories), providing a count for each subset. There are several types of faceting: field values, numeric |
| and date ranges, pivots (decision tree), and arbitrary query faceting. |
| |
| #### Field facets |
| |
| In addition to providing search results, a Solr query can return the number of documents that contain each unique value |
| in the whole result set. |
| |
| From the core-specific Admin UI Query tab, if you check the "`facet`" checkbox, you'll see a few facet-related options |
| appear: |
| |
| <img style="border:1px solid #ccc" src="images/quickstart-admin-ui-facet-options.png" alt="Solr Quick Start: Query tab facet options"/> |
| |
| To see facet counts from all documents (`q=*:*`): turn on faceting (`facet=true`), and specify the field to facet on via |
| the `facet.field` param. If you only want facets, and no document contents, specify `rows=0`. The `curl` command below |
| will return facet counts for the `manu_id_s` field: |
| |
| curl http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=*:*&rows=0 \ |
| &facet=true&facet.field=manu_id_s |
| |
| In your terminal, you'll see: |
| |
| { |
| "responseHeader":{ |
| "status":0, |
| "QTime":3, |
| "params":{ |
| "facet":"true", |
| "indent":"true", |
| "q":"*:*", |
| "facet.field":"manu_id_s", |
| "wt":"json", |
| "rows":"0"}}, |
| "response":{"numFound":2990,"start":0,"docs":[] |
| }, |
| "facet_counts":{ |
| "facet_queries":{}, |
| "facet_fields":{ |
| "manu_id_s":[ |
| "corsair",3, |
| "belkin",2, |
| "canon",2, |
| "apple",1, |
| "asus",1, |
| "ati",1, |
| "boa",1, |
| "dell",1, |
| "eu",1, |
| "maxtor",1, |
| "nor",1, |
| "uk",1, |
| "viewsonic",1, |
| "samsung",0]}, |
| "facet_ranges":{}, |
| "facet_intervals":{}}} |
| |
| #### Range facets |
| |
| For numerics or dates, it's often desirable to partition the facet counts into ranges rather than discrete values. |
| A prime example of numeric range faceting, using the example product data, is `price`. In the `/browse` UI, it looks |
| like this: |
| |
| <img style="border:1px solid #ccc" src="images/quickstart-range-facet.png" alt="Solr Quick Start: Range facets"/> |
| |
| The data for these price range facets can be seen in JSON format with this command: |
| |
| curl http://localhost:8983/solr/gettingstarted/select?q=*:*&wt=json&indent=on&rows=0&facet=true \ |
| &facet.range=price \ |
| &f.price.facet.range.start=0 \ |
| &f.price.facet.range.end=600 \ |
| &f.price.facet.range.gap=50 \ |
| &facet.range.other=after |
| |
| In your terminal you will see: |
| |
| { |
| "responseHeader":{ |
| "status":0, |
| "QTime":1, |
| "params":{ |
| "facet.range.other":"after", |
| "facet":"true", |
| "indent":"on", |
| "q":"*:*", |
| "f.price.facet.range.gap":"50", |
| "facet.range":"price", |
| "f.price.facet.range.end":"600", |
| "wt":"json", |
| "f.price.facet.range.start":"0", |
| "rows":"0"}}, |
| "response":{"numFound":2990,"start":0,"docs":[] |
| }, |
| "facet_counts":{ |
| "facet_queries":{}, |
| "facet_fields":{}, |
| "facet_ranges":{ |
| "price":{ |
| "counts":[ |
| "0.0",19, |
| "50.0",1, |
| "100.0",0, |
| "150.0",2, |
| "200.0",0, |
| "250.0",1, |
| "300.0",1, |
| "350.0",2, |
| "400.0",0, |
| "450.0",1, |
| "500.0",0, |
| "550.0",0], |
| "gap":50.0, |
| "start":0.0, |
| "end":600.0, |
| "after":2}}, |
| "facet_intervals":{}}} |
| |
| #### Pivot facets |
| |
| Another faceting type is pivot facets, also known as "decison trees", allowing two or more fields to be nested for all |
| the various possible combinations. Using the example technical product data, pivot facets can be used to see how many |
| of the products in the "book" category (the `cat` field) are in stock or not in stock. Here's how to get at the raw |
| data for this scenario: |
| |
| curl http://localhost:8983/solr/gettingstarted/select?q=*:*&rows=0&wt=json&indent=on \ |
| &facet=on&facet.pivot=cat,inStock |
| |
| This results in the following response (trimmed to just the book category output), which says out of 14 items in the |
| "book" category, 12 are in stock and 2 are not in stock: |
| |
| ... |
| "facet_pivot":{ |
| "cat,inStock":[{ |
| "field":"cat", |
| "value":"book", |
| "count":14, |
| "pivot":[{ |
| "field":"inStock", |
| "value":true, |
| "count":12}, |
| { |
| "field":"inStock", |
| "value":false, |
| "count":2}]}, |
| ... |
| |
| #### More faceting options |
| |
| For the full scoop on Solr faceting, visit the Solr Reference Guide's [Faceting](https://cwiki.apache.org/confluence/display/solr/Faceting) |
| section. |
| |
| |
| ### Spatial |
| |
| Solr has sophisticated geospatial support, including searching within a specified distance range of a given location |
| (or within a bounding box), sorting by distance, or even boosting results by the distance. Some of the example tech products |
| documents in `example/exampledocs/*.xml` have locations associated with them to illustrate the spatial capabilities. |
| To run the tech products example, see the [techproducts example section](#techproducts). |
| Spatial queries can be combined with any other types of queries, such as in this example of querying for "ipod" within |
| 10 kilometers from San Francisco: |
| |
| <img style="border:1px solid #ccc" width="50%" src="images/quickstart-spatial.png" alt="Solr Quick Start: spatial search" class="float-right"/> |
| |
| The URL to this example is <http://localhost:8983/solr/techproducts/browse?q=ipod&pt=37.7752%2C-122.4232&d=10&sfield=store&fq=%7B%21bbox%7D&queryOpts=spatial&queryOpts=spatial>, |
| leveraging the `/browse` UI to show a map for each item and allow easy selection of the location to search near. |
| |
| To learn more about Solr's spatial capabilities, see the Solr Reference Guide's [Spatial Search](https://cwiki.apache.org/confluence/display/solr/Spatial+Search) |
| section. |
| |
| ## Wrapping up |
| |
| If you've run the full set of commands in this quick start guide you have done the following: |
| |
| * Launched Solr into SolrCloud mode, two nodes, two collections including shards and replicas |
| * Indexed a directory of rich text files |
| * Indexed Solr XML files |
| * Indexed Solr JSON files |
| * Indexed CSV content |
| * Opened the admin console, used its query interface to get JSON formatted results |
| * Opened the /browse interface to explore Solr's features in a more friendly and familiar interface |
| |
| Nice work! The script (see below) to run all of these items took under two minutes! (Your run time may vary, depending |
| on your computer's power and resources available.) |
| |
| Here's a Unix script for convenient copying and pasting in order to run the key commands for this quick start guide: |
| |
| date ; |
| bin/solr start -e cloud -noprompt ; |
| open http://localhost:8983/solr ; |
| bin/post -c gettingstarted docs/ ; |
| open http://localhost:8983/solr/gettingstarted/browse ; |
| bin/post -c gettingstarted example/exampledocs/*.xml ; |
| bin/post -c gettingstarted example/exampledocs/books.json ; |
| bin/post -c gettingstarted example/exampledocs/books.csv ; |
| bin/post -c gettingstarted -d "<delete><id>SP2514N</id></delete>" ; |
| bin/solr healthcheck -c gettingstarted ; |
| date ; |
| |
| <a name="cleanup"/> |
| ## Cleanup |
| |
| As you work through this guide, you may want to stop Solr and reset the environment back to the starting point. |
| The following command line will stop Solr and remove the directories for each of the two nodes that the start script |
| created: |
| |
| bin/solr stop -all ; rm -Rf example/cloud/ |
| |
| ## Where to next? |
| |
| For more information on Solr, check out the following resources: |
| |
| * [Solr Reference Guide](https://cwiki.apache.org/confluence/display/solr/Apache+Solr+Reference+Guide) (ensure you |
| match the version of the reference guide with your version of Solr) |
| * See also additional [Resources](http://lucene.apache.org/solr/resources.html) |
| |