mirror of https://github.com/apache/lucene.git
115 lines
4.5 KiB
Plaintext
115 lines
4.5 KiB
Plaintext
= Using Solr From Ruby
|
|
// Licensed to the Apache Software Foundation (ASF) under one
|
|
// or more contributor license agreements. See the NOTICE file
|
|
// distributed with this work for additional information
|
|
// regarding copyright ownership. The ASF licenses this file
|
|
// to you under the Apache License, Version 2.0 (the
|
|
// "License"); you may not use this file except in compliance
|
|
// with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing,
|
|
// software distributed under the License is distributed on an
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
// KIND, either express or implied. See the License for the
|
|
// specific language governing permissions and limitations
|
|
// under the License.
|
|
|
|
Solr has an optional Ruby response format that extends the <<response-writers.adoc#json-response-writer,JSON output>> to allow the response to be safely eval'd by Ruby's interpreter
|
|
|
|
This Ruby response format differs from JSON in the following ways:
|
|
|
|
* Ruby's single quoted strings are used to prevent possible string exploits
|
|
** `\` and `'` are the only two characters escaped...
|
|
** unicode escapes not used... data is written as raw UTF-8
|
|
* nil used for null
|
|
* `\=>` used as the key/value separator in maps
|
|
|
|
Here's an example Ruby response from Solr, for a request like `\http://localhost:8983/solr/techproducts/select?q=iPod&wt=ruby&indent=on` (with Solr launching using `bin/solr start -e techproducts`):
|
|
|
|
[source,ruby]
|
|
----
|
|
{
|
|
'responseHeader'=>{
|
|
'status'=>0,
|
|
'QTime'=>0,
|
|
'params'=>{
|
|
'q'=>'iPod',
|
|
'indent'=>'on',
|
|
'wt'=>'ruby'}},
|
|
'response'=>{'numFound'=>3,'start'=>0,'docs'=>[
|
|
{
|
|
'id'=>'IW-02',
|
|
'name'=>'iPod & iPod Mini USB 2.0 Cable',
|
|
'manu'=>'Belkin',
|
|
'manu_id_s'=>'belkin',
|
|
'cat'=>['electronics',
|
|
'connector'],
|
|
'features'=>['car power adapter for iPod, white'],
|
|
'weight'=>2.0,
|
|
'price'=>11.5,
|
|
'price_c'=>'11.50,USD',
|
|
'popularity'=>1,
|
|
'inStock'=>false,
|
|
'store'=>'37.7752,-122.4232',
|
|
'manufacturedate_dt'=>'2006-02-14T23:55:59Z',
|
|
'_version_'=>1491038048794705920},
|
|
{
|
|
'id'=>'F8V7067-APL-KIT',
|
|
'name'=>'Belkin Mobile Power Cord for iPod w/ Dock',
|
|
'manu'=>'Belkin',
|
|
'manu_id_s'=>'belkin',
|
|
'cat'=>['electronics',
|
|
'connector'],
|
|
'features'=>['car power adapter, white'],
|
|
'weight'=>4.0,
|
|
'price'=>19.95,
|
|
'price_c'=>'19.95,USD',
|
|
'popularity'=>1,
|
|
'inStock'=>false,
|
|
'store'=>'45.18014,-93.87741',
|
|
'manufacturedate_dt'=>'2005-08-01T16:30:25Z',
|
|
'_version_'=>1491038048792608768},
|
|
{
|
|
'id'=>'MA147LL/A',
|
|
'name'=>'Apple 60 GB iPod with Video Playback Black',
|
|
'manu'=>'Apple Computer Inc.',
|
|
'manu_id_s'=>'apple',
|
|
'cat'=>['electronics',
|
|
'music'],
|
|
'features'=>['iTunes, Podcasts, Audiobooks',
|
|
'Stores up to 15,000 songs, 25,000 photos, or 150 hours of video',
|
|
'2.5-inch, 320x240 color TFT LCD display with LED backlight',
|
|
'Up to 20 hours of battery life',
|
|
'Plays AAC, MP3, WAV, AIFF, Audible, Apple Lossless, H.264 video',
|
|
'Notes, Calendar, Phone book, Hold button, Date display, Photo wallet, Built-in games, JPEG photo playback, Upgradeable firmware, USB 2.0 compatibility, Playback speed control, Rechargeable capability, Battery level indication'],
|
|
'includes'=>'earbud headphones, USB cable',
|
|
'weight'=>5.5,
|
|
'price'=>399.0,
|
|
'price_c'=>'399.00,USD',
|
|
'popularity'=>10,
|
|
'inStock'=>true,
|
|
'store'=>'37.7752,-100.0232',
|
|
'manufacturedate_dt'=>'2005-10-12T08:00:00Z',
|
|
'_version_'=>1491038048799948800}]
|
|
}}
|
|
----
|
|
|
|
Here is a simple example of how one may query Solr using the Ruby response format:
|
|
|
|
[source,ruby]
|
|
----
|
|
require 'net/http'
|
|
|
|
h = Net::HTTP.new('localhost', 8983)
|
|
http_response = h.get('/solr/techproducts/select?q=iPod&wt=ruby')
|
|
rsp = eval(http_response.body)
|
|
|
|
puts 'number of matches = ' + rsp['response']['numFound'].to_s
|
|
#print out the name field for each returned document
|
|
rsp['response']['docs'].each { |doc| puts 'name field = ' + doc['name'] }
|
|
----
|
|
|
|
For simple interactions with Solr, this may be all you need! If you are building complex interactions with Solr, then consider the libraries mentioned at https://wiki.apache.org/solr/Ruby%20Response%20Format
|