SlideShare uma empresa Scribd logo
1 de 64
Baixar para ler offline
Rapid Prototyping
      with
       Solr
    NFJS - Raleigh, August 2011
     Presented by Erik Hatcher
erik.hatcher@lucidimagination.com
         Lucid Imagination
 http://www.lucidimagination.com
About me...
• Co-author, "Lucene in Action" (and "Java
  Development with Ant" / "Ant in Action"
  once upon a time)
• "Apache guy" - Lucene/Solr committer;
  member of Lucene PMC, member of
  Apache Software Foundation
• Co-founder, evangelist, trainer, coder @
  Lucid Imagination
About Lucid Imagination...
•   Lucid Imagination provides commercial-grade
    support, training, high-level consulting and value-
    added software for Lucene and Solr.

•   We make Lucene ‘enterprise-ready’ by offering:

    •   Free, certified, distributions and downloads.

    •   Support, training, and consulting.

    •   LucidWorks Enterprise, a commercial search
        platform built on top of Solr.
Abstract
Got data? Let's make it searchable! Rapid Prototyping with
Solr will demonstrate getting documents into Solr quickly,
provide some tips in adjusting Solr's schema to match your
needs better, and finally will discuss how to showcase your
  data in a flexible search user interface. We'll see how to
  rapidly leverage faceting, highlighting, spell checking, and
debugging. Even after all that, there will be enough time left
    to outline the next steps in developing your search
           application and taking it to production.
What is Lucene?
•   An open source Java-based IR library with best practice indexing
    and query capabilities, fast and lightweight search and indexing.

•   100% Java (.NET, Perl and other versions too).

•   Stable, mature API.

•   Continuously improved and tuned over more than 10 years.

•   Cleanly implemented, easy to embed in an application.

•   Compact, portable index representation.

•   Programmable text analyzers, spell checking and highlighting.

•   Not a crawler or a text extraction tool.
Lucene's History
•   Created by Doug Cutting in 1999

    •   built on ideas from search projects Doug created at Xerox PARC
        and Apple.

•   Donated to the Apache Software Foundation (ASF) in 2001.

•   Became an Apache top-level project in 2005.

•   Has grown and morphed through the years and is now both:

    •   A search library.

    •   An ASF Top-Level Project (TLP) encompassing several sub-projects.

•   Lucene and Solr "merged" development in early 2010.
What is Solr?
•   An open source search engine.

•   Indexes content sources, processes query requests, returns
    search results.

•   Uses Lucene as the "engine", but adds full enterprise search
    server features and capabilities.

•   A web-based application that processes HTTP requests and
    returns HTTP responses.

•   Initially started in 2004 and developed by CNET as an in-house
    project to add search capability for the company website.

•   Donated to ASF in 2006.
What Version of Solr?

•   There’s more than one answer!

•   The current, released, stable version is 3.3

•   The development release is referred to as “trunk”.

    •   This is where the new, less tested work goes on

    •   Also referred to as 4.0

•   LucidWorks Enterprise is built on a trunk snapshot +
    additional features.
Why prototype?

• Demonstrate Solr can handle your needs
• Stake/purse-holder buy-in
• It's quick, easy, and fun!
• The User Interface is the app
Workflow

• Ingest data
• Use
• Refine config/interactions, repeat
Got Data?
• Rich text files?
• Databases?
• Feeds (Atom/RSS/XML)?
• 3rd party repositories? (SharePoint,
  Documentum, ...)
• CSV!!!!
User Interface
Getting Started
• Download Solr
 • http://lucene.apache.org/solr
• "Install" it
 • unzip or tar -xvf
• Start it
 • cd example; java -jar start.jar
e.g. Conference
               Attendees

First Name,Last Name,Company,Title,Work Country

Erik,Hatcher,Lucid Imagination,"Member, Technical Staff", USA

.

.

.
First Try

curl "http://localhost:8983/solr/update/csv?stream.file=attendees.csv"

undefined field First Name
Dynamic Fields


<dynamicField name="*_s" type="string" indexed="true" stored="true"/>
<dynamicField name="*_t" type="text" indexed="true" stored="true"/>
Second try

curl "http://localhost:8983/solr/update/csv?
stream.file=attendees.csv
&fieldnames=first_s,last_s,company_s,title_t,country_s
&header=true"

Document [null] missing required field: id
uniqueKey

• Optional, Solr-specific, feature
• generally "string" type
• schema.xml: <uniqueKey>id</uniqueKey>
• adds of existing id'd documents updates
  (delete + add)
id
curl "http://localhost:8983/solr/update/csv
?stream.file=attendees.csv
&fieldnames=first_s,   id,company_s,title_t,co   untry_s&header=true"


<?xml version="1.0" encoding="UTF-8"?>
<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">40</int>
  </lst>
</response>
Tada!
Schema tinkering
•   Removed all example field definitions

•   Uncomment and adjust catch-all dynamic field:

    • <dynamicField   name="*" type="string"
        multiValued="false"/>

•   Ensure uniqueKey is appropriate

    •   unusual in this example, disabled it

•   Make every document/field fully searchable!

    • <copyField         source="*" dest="text"/>
After adjusting config...


• Restart Solr
• Or... reload the core (when in multicore
  mode)
Clean import
# Delete all documents
curl "http://localhost:8983/solr/update?stream.body=
%3Cdelete%3E%3Cquery %3E*:*%3C/query%3E%3C/delete
%3E&commit=true"

# Index your data
curl "http://localhost:8983/solr/update/csv?
commit=true&stream.file=EuroCon2010.csv&fieldnames=first
,last, company,title,country&header=true"
Facets
http://localhost:8983/solr/browse?facet.field=country
Value Normalization

• http://localhost:8983/solr/update/csv?
  commit=true&stream.file=attendees.csv&fi
  eldnames=first,last,company,title,country&h
  eader=true&f.country.map=Great
  +Britain:United+Kingdom
Polishing

• Customize request handler mappings
• Edit templates
 • hit display
 • header/footer
 • style
/browse
<requestHandler name="/browse" class="solr.SearchHandler">
  <lst name="defaults">
    <str name="wt">velocity</str><str name="v.layout">layout</str>
    <str name="v.template">browse</str>

    <str name="rows">10</str><str name="fl">*,score</str>

    <str   name="defType">lucene</str><str name="q">*:*</str>
    <str   name="debugQuery">true</str>
    <str   name="hl">on</str><str name="hl.fl">title</str>
    <str   name="hl.fragsize">0</str>
    <str   name="hl.alternateField">title</str>

    <str name="facet">on</str>
    <str name="facet.mincount">1</str>
    <str name="facet.missing">true</str>
  </lst>
  <lst name="appends"><str name="facet.field">country</str></lst>
</requestHandler>
hit.vm

<div class="result-document">
  <p>$doc.getFieldValue('first') $doc.getFieldValue('last')</p>
  <p>$!doc.getFieldValue('title'), $!doc.getFieldValue('company')</p>
  <p>$!doc.getFieldValue('country')</p>
</div>
Voila!
Adding bells and
            whistles
•   jQuery
    •   <script type="text/javascript" src="/solr/
        admin/jquery.js"/>
•   TreeMap
    •   <script type="text/javascript" src="/scripts/
        treemap.js"/>
TreeMap code
<script type="text/javascript">
 function onLoad() {
   jQuery("#treemap-country").treemap(640,480, {});
 }
</script>
----------------------------
<body onload="onLoad();">
----------------------------
<table id="treemap-country">
#foreach($facet in $response.getFacetField('country').values)
   <tr>
     <td>#if($facet.name)
$esc.html($facet.name)#else&lt;Unspecified&gt;#end</td>
     <td>$facet.count</td>
     <td>#if($facet.name)$esc.html($facet.name)#{else}
Unspecified#end</td>
   </tr>
#end
</table>
TreeMap
Ajax fun: giveaways

• Add a "static" templated page
• jQuery Ajax request
• snippet templated output
solrconfig.xml
                 "static" page
<requestHandler name="/giveaways"
class="solr.DumpRequestHandler">
 <lst name="defaults">
  <str name="wt">velocity</str>
  <str name="v.template">giveaways</str>
  <str name="v.layout">layout</str>
 </lst>
</requestHandler>

giveaways.vm
<input type="button" value="Pick a Winner"
onClick="javascript:$ ('#winner').load('/solr/
generate_winner?sort=random_' + new Date().getTime() +
'+asc');">
 <h2>And the winner is...</h2> <center><font
size="20"><div id="winner"></div></font></center>
fragment template
solrconfig.xml
<requestHandler name="/generate_winner" class="solr.SearchHandler">
  <!-- sort=random_... required -->
  <lst name="defaults">
    <str name="wt">velocity</str>
    <str name="v.template">winner</str>
    <str name="rows">1</str>
    <str name="fl">first,last</str>
    <str name="defType">lucene</str>
    <str name="q">*:*
                  -company:"Lucid Imagination"
                  -company:"Stone Circle Productions"</str>
  </lst>
</requestHandler>

winner.vm
#set($winner=$response.results.get(0))
$winner.getFieldValue('first') $winner.getFieldValue('last')
And the winner is...
e.g. data.gov
Data.gov CSV catalog
URL,Title,Agency,Subagency,Category,Date Released,Date Updated,Time
Period,Frequency,Description,Data.gov Data Category Type,Specialized Data Category
Designation,Keywords,Citation,Agency Program Page,Agency Data Series Page,Unit of
Analysis,Granularity,Geographic Coverage,Collection Mode,Data Collection
Instrument,Data Dictionary/Variable List,Applicable Agency Information Quality
Guideline Designation,Data Quality Certification,Privacy and Confidentiality,Technical
Documentation,Additional Metadata,FGDC Compliance (Geospatial Only),Statistical
Methodology,Sampling,Estimation,Weighting,Disclosure Avoidance,Questionnaire
Design,Series Breaks,Non-response Adjustment,Seasonal Adjustment,Statistical
Characteristics,Feeds Access Point,Feeds File Size,XML Access Point,XML File Size,CSV/
TXT Access Point,CSV/TXT File Size,XLS Access Point,XLS File Size,KML/KMZ Access
Point,KML File Size,ESRI Access Point,ESRI File Size,Map Access Point,Data Extraction
Access Point,Widget Access Point
"http://www.data.gov/details/4","Next Generation Radar (NEXRAD) Locations","Department of Commerce","National Oceanic
and Atmospheric Administration","Geography and Environment","1991","Irregular as needed","1991 to present","Between 4
and 10 minutes","This geospatial rendering of weather radar sites gives access to an historical archive of Terminal
Doppler Weather Radar data and is used primarily for research purposes. The archived data includes base data and
derived products of the National Weather Service (NWS) Weather Surveillance Radar 88 Doppler (WSR-88D) next generation
(NEXRAD) weather radar. Weather radar detects the three meteorological base data quantities: reflectivity, mean radial
velocity, and spectrum width. From these quantities, computer processing generates numerous meteorological analysis
products for forecasts, archiving and dissemination. There are 159 operational NEXRAD radar systems deployed
throughout the United States and at selected overseas locations. At the Radar Operations Center (ROC) in Norman OK,
personnel from the NWS, Air Force, Navy, and FAA use this distributed weather radar system to collect the data needed
to warn of impending severe weather and possible flash floods; support air traffic safety and assist in the management
of air traffic flow control; facilitate resource protection at military bases; and optimize the management of water,
agriculture, forest, and snow removal. This data set is jointly owned by the National Oceanic and Atmospheric
Administration, Federal Aviation Administration, and Department of Defense.","Raw Data Catalog",...
Debugging
http://localhost:8983/solr/data.gov?q=searching&debugQuery=true
Mapping field values
• CSV update handler can map field values
• &f.privacy_and_confidentiality.map=YES:Yes
  &f.data_quality_certification.map=YES:Yes
Splitting keywords
• CSV handler: f.keywords.split=true
 • stored values are split, multivalued
• Or via schema
 • Stored value remains as in original, single valued
<fieldType name="comma_separated" class="solr.TextField" omitNorms="true">
  <analyzer>
    <tokenizer class="solr.PatternTokenizerFactory" pattern="s*,s*"/>
  </analyzer>
</fieldType>
...
<field name="keywords" type="comma_separated" indexed="true" stored="true"/>
Suggest
      • Suggest terms as user types in search box
      • Technique: jQuery autocomplete, Solr’s
         TermsComponent,Velocity template
http://localhost:8983/solr/terms
?terms.fl=suggest
&terms.prefix=sola&terms.sort=count
&wt=velocity&v.template=suggest
        #foreach($t in $response.response.terms.suggest)
        $t.key
        #end
Suggest schema
<fieldType name="suggestable" class="solr.TextField"
positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PatternReplaceFilterFactory"
             pattern="([^a-z])"
             replacement="" replace="all"/>
    <filter class="solr.StopFilterFactory"
             ignoreCase="true" words="stopwords.txt"
             enablePositionIncrements="true" />
  </analyzer>
</fieldType>

...

<field name="suggest" type="suggestable"
       indexed="true" stored="false" multiValued="true"/>
Custom pages


• Document detail page
• Multiple query intersection comparison
  with Venn visualization
Document detail
http://localhost:8983/solr/data.gov/document
?id=http%3A%2F%2Fwww.data.gov%2Fdetails%2F61
Document detail detail
    solrconfig.xml
    <requestHandler name="/data.gov/document" class="solr.SearchHandler">
      <lst name="defaults">
        <str name="wt">velocity</str>
        <str name="v.template">document</str>
        <str name="v.layout">layout</str>
        <str name="title">Data.gov data set</str>
        <str name="q">{!raw f=id v=$id}</str>
      </lst>
    </requestHandler>
document.vm
#set($doc= $response.results.get(0))
<span><a href="$doc.getFieldValue('id')">$doc.getFieldValue('id')</a></span>

<table>
#foreach($fieldname in $doc.fieldNames)
  <tr>
     <td>$fieldname:</td>
     <td>
      #foreach($value in $doc.getFieldValues($fieldname))
        $esc.html($value)
      #end
      </td>
  </tr>
#end
</table>
Query intersection

• Just showing off.... how easy it is to do
  something with a bit of visual impact
• Compare three independent queries,
  intersecting them in a Venn diagram
  visualization
Compare static page
solrconfig.xml
<requestHandler name="/data.gov/compare" class="solr.DumpRequestHandler">
  <lst name="defaults">
    <str name="wt">velocity</str>
    <str name="v.template">compare</str>
    <str name="v.layout">layout</str>
    <str name="title">Data.gov Query Comparison</str>
  </lst>
</requestHandler> compare.vm
                  <script type="text/javascript">
                    function generate_venn() {
                      var a=encodeURIComponent($("#a").val());
                      var b=encodeURIComponent($("#b").val());
                      var c=encodeURIComponent($("#c").val());
                      var ab='('+a+')+AND+('+b+')';
                      var ac='('+a+')+AND+('+c+')';
                      var bc='('+b+')+AND+('+c+')';
                      var abc='('+a+')+AND+('+b+')+AND+('+c+')';
                     $('#venn').load('/solr/select?
                  q=*:*&wt=velocity&v.template=venn&rows=0&facet=on&facet.query={!key=a}'+a+'&facet.query={!key=b}'+b
                  +'&facet.query={!key=c}'+c+'&facet.query={!key=intersect_ab}'+ab+'&facet.query={!key=intersect_ac}'+ac
                  +'&facet.query={!key=intersect_bc}'+bc+'&facet.query={!key=intersect_abc}'+abc+'&q_a='+a+'&q_b='+b+'&q_c='+c
                  +'&q_ab='+ab+'&q_ac='+ac+'&q_bc='+bc+'&q_abc='+abc);
                      return false;
                    }
                  </script>
                  <form action="#" id="compare_form" onsubmit="return generate_venn()">
                    A: <input type="text" name="a" id="a" value="health"/>
                    B: <input type="text" name="b" id="b" value="weather"/>
                    C: <input type="text" name="c" id="c" value="ozone"/>
                    <input type="submit"/>
                  </form>
                  <div id="venn"></div>
Venn chart
venn.vm
#set($values = $response.response.facet_counts.facet_queries)
#set($params = $response.responseHeader.params)

<img src="http://chart.apis.google.com/chart?
chs=600x400&cht=v&chd=t:$values.a,$values.b,$values.c,
$values.intersect_ab,$values.intersect_ac,$values.intersect_bc,
$values.intersect_abc&chdl=$esc.url($params.q_a)|$esc.url
($params.q_b)|$esc.url($params.q_c)"/>
<ul>
  <li>A: <a href="/solr/data.gov?q={!lucene}$params.q_a">$params.q_a</a> ($values.a)</li>
  <li>B: <a href="/solr/data.gov?q={!lucene}$params.q_b">$params.q_b</a> ($values.b)</li>
  <li>C: <a href="/solr/data.gov?q={!lucene}$params.q_c">$params.q_c</a> ($values.c)</li>
  <li>A&B: <a href="/solr/data.gov?q={!lucene}$params.q_ab">$params.q_ab</a>
($values.intersect_ab)</li>
  <li>A&C: <a href="/solr/data.gov?q={!lucene}$params.q_ac">$params.q_ac</a>
($values.intersect_ac)</li>
  <li>B&C: <a href="/solr/data.gov?q={!lucene}$params.q_bc">$params.q_bc</a>
($values.intersect_bc)</li>
  <li>A&B&C: <a href="/solr/data.gov?q={!lucene}$params.q_abc">$params.q_abc</a>
($values.intersect_abc)</li>
</ul>
Solritas
•   Pronounced: so-LAIR-uh-toss

•   Celeritas is a Latin word, translated as "swiftness" or
    "speed". It is often given as the origin of the symbol c,
    the universal notation for the speed of light - http://
    en.wikipedia.org/wiki/Celeritas

•   VelocityResponseWriter - simply passes the Solr
    response through the Apache Velocity templating
    engine

•   http://wiki.apache.org/solr/VelocityResponseWriter
Solr Flare
• Ruby on Rails plugin
• facet field detection, autosuggest, saved
  search, inverted facets, pie charts, Simile
  Timeline and Exhibit integration
• Useful for rapid prototyping
• See Flare's big brother, Blacklight, for
  production quality
Tang on Flare
• UVA radiation = blacklight
• libraries are much more than books
• opinionated
  • Ruby on Rails: best choice for an
    extensible user interface development
    framework
Blacklight @ UVa
Blacklight @ Stanford
Blacklight @ AgNIC
Prototyping Tools

• CSV update handler - /update/csv
• Schema Browser
• Solritas, Flare, Blacklight, or...
 • just HTML+JavaScript (wt=json)
Test

• Performance
• Scalability
• Relevance
• Automate all of the above, start baselines
  early, avoid regressions
Then what?
•   Script the indexing process: full & delta
•   Work with real users on actual needs
•   Integrate with production systems
•   Iterate on schema enhancements,
    configuration tweaks such as caching
•   Deploy to staging/production environments
    and work at scale: collection size, real queries
    and performance, hardware and JVM settings
LucidFind




http://www.lucidimagination.com/search/?q=user+interface
For more information...
•   http://www.lucidimagination.com

•   LucidFind

    •   search Lucene ecosystem: mailing lists, wikis, JIRA, etc

    •   http://search.lucidimagination.com

•   Getting started with LucidWorks Enterprise:

    •   http://www.lucidimagination.com/products/
        lucidworks-search-platform/enterprise

•   http://lucene.apache.org/solr - wiki, e-mail lists
Thank You!

Mais conteúdo relacionado

Mais procurados

Lucene for Solr Developers
Lucene for Solr DevelopersLucene for Solr Developers
Lucene for Solr DevelopersErik Hatcher
 
Integrating the Solr search engine
Integrating the Solr search engineIntegrating the Solr search engine
Integrating the Solr search engineth0masr
 
Lucene for Solr Developers
Lucene for Solr DevelopersLucene for Solr Developers
Lucene for Solr DevelopersErik Hatcher
 
New-Age Search through Apache Solr
New-Age Search through Apache SolrNew-Age Search through Apache Solr
New-Age Search through Apache SolrEdureka!
 
Solr Powered Lucene
Solr Powered LuceneSolr Powered Lucene
Solr Powered LuceneErik Hatcher
 
Apache Solr crash course
Apache Solr crash courseApache Solr crash course
Apache Solr crash courseTommaso Teofili
 
Lucene for Solr Developers
Lucene for Solr DevelopersLucene for Solr Developers
Lucene for Solr DevelopersErik Hatcher
 
Introduction to Solr
Introduction to SolrIntroduction to Solr
Introduction to SolrErik Hatcher
 
code4lib 2011 preconference: What's New in Solr (since 1.4.1)
code4lib 2011 preconference: What's New in Solr (since 1.4.1)code4lib 2011 preconference: What's New in Solr (since 1.4.1)
code4lib 2011 preconference: What's New in Solr (since 1.4.1)Erik Hatcher
 
Apache Solr! Enterprise Search Solutions at your Fingertips!
Apache Solr! Enterprise Search Solutions at your Fingertips!Apache Solr! Enterprise Search Solutions at your Fingertips!
Apache Solr! Enterprise Search Solutions at your Fingertips!Murshed Ahmmad Khan
 
Introduction to Solr
Introduction to SolrIntroduction to Solr
Introduction to SolrErik Hatcher
 
Using Apache Solr
Using Apache SolrUsing Apache Solr
Using Apache Solrpittaya
 
Rebuilding Solr 6 examples - layer by layer (LuceneSolrRevolution 2016)
Rebuilding Solr 6 examples - layer by layer (LuceneSolrRevolution 2016)Rebuilding Solr 6 examples - layer by layer (LuceneSolrRevolution 2016)
Rebuilding Solr 6 examples - layer by layer (LuceneSolrRevolution 2016)Alexandre Rafalovitch
 
Solr Troubleshooting - TreeMap approach
Solr Troubleshooting - TreeMap approachSolr Troubleshooting - TreeMap approach
Solr Troubleshooting - TreeMap approachAlexandre Rafalovitch
 
Solr 6 Feature Preview
Solr 6 Feature PreviewSolr 6 Feature Preview
Solr 6 Feature PreviewYonik Seeley
 
Building your own search engine with Apache Solr
Building your own search engine with Apache SolrBuilding your own search engine with Apache Solr
Building your own search engine with Apache SolrBiogeeks
 
Solr Indexing and Analysis Tricks
Solr Indexing and Analysis TricksSolr Indexing and Analysis Tricks
Solr Indexing and Analysis TricksErik Hatcher
 

Mais procurados (20)

Solr 4
Solr 4Solr 4
Solr 4
 
Lucene for Solr Developers
Lucene for Solr DevelopersLucene for Solr Developers
Lucene for Solr Developers
 
Integrating the Solr search engine
Integrating the Solr search engineIntegrating the Solr search engine
Integrating the Solr search engine
 
Lucene for Solr Developers
Lucene for Solr DevelopersLucene for Solr Developers
Lucene for Solr Developers
 
New-Age Search through Apache Solr
New-Age Search through Apache SolrNew-Age Search through Apache Solr
New-Age Search through Apache Solr
 
Solr Flair
Solr FlairSolr Flair
Solr Flair
 
Solr Powered Lucene
Solr Powered LuceneSolr Powered Lucene
Solr Powered Lucene
 
Apache Solr crash course
Apache Solr crash courseApache Solr crash course
Apache Solr crash course
 
Lucene for Solr Developers
Lucene for Solr DevelopersLucene for Solr Developers
Lucene for Solr Developers
 
Introduction to Solr
Introduction to SolrIntroduction to Solr
Introduction to Solr
 
code4lib 2011 preconference: What's New in Solr (since 1.4.1)
code4lib 2011 preconference: What's New in Solr (since 1.4.1)code4lib 2011 preconference: What's New in Solr (since 1.4.1)
code4lib 2011 preconference: What's New in Solr (since 1.4.1)
 
Apache Solr! Enterprise Search Solutions at your Fingertips!
Apache Solr! Enterprise Search Solutions at your Fingertips!Apache Solr! Enterprise Search Solutions at your Fingertips!
Apache Solr! Enterprise Search Solutions at your Fingertips!
 
Solr Recipes
Solr RecipesSolr Recipes
Solr Recipes
 
Introduction to Solr
Introduction to SolrIntroduction to Solr
Introduction to Solr
 
Using Apache Solr
Using Apache SolrUsing Apache Solr
Using Apache Solr
 
Rebuilding Solr 6 examples - layer by layer (LuceneSolrRevolution 2016)
Rebuilding Solr 6 examples - layer by layer (LuceneSolrRevolution 2016)Rebuilding Solr 6 examples - layer by layer (LuceneSolrRevolution 2016)
Rebuilding Solr 6 examples - layer by layer (LuceneSolrRevolution 2016)
 
Solr Troubleshooting - TreeMap approach
Solr Troubleshooting - TreeMap approachSolr Troubleshooting - TreeMap approach
Solr Troubleshooting - TreeMap approach
 
Solr 6 Feature Preview
Solr 6 Feature PreviewSolr 6 Feature Preview
Solr 6 Feature Preview
 
Building your own search engine with Apache Solr
Building your own search engine with Apache SolrBuilding your own search engine with Apache Solr
Building your own search engine with Apache Solr
 
Solr Indexing and Analysis Tricks
Solr Indexing and Analysis TricksSolr Indexing and Analysis Tricks
Solr Indexing and Analysis Tricks
 

Destaque

Make your gui shine with ajax solr
Make your gui shine with ajax solrMake your gui shine with ajax solr
Make your gui shine with ajax solrlucenerevolution
 
Open source applied: Real-world uses
Open source applied: Real-world usesOpen source applied: Real-world uses
Open source applied: Real-world usesRogue Wave Software
 
What's New in Solr 3.x / 4.0
What's New in Solr 3.x / 4.0What's New in Solr 3.x / 4.0
What's New in Solr 3.x / 4.0Erik Hatcher
 
"Solr Update" at code4lib '13 - Chicago
"Solr Update" at code4lib '13 - Chicago"Solr Update" at code4lib '13 - Chicago
"Solr Update" at code4lib '13 - ChicagoErik Hatcher
 
Faceted Search – the 120 Million Documents Story
Faceted Search – the 120 Million Documents StoryFaceted Search – the 120 Million Documents Story
Faceted Search – the 120 Million Documents StorySourcesense
 
Multi faceted responsive search, autocomplete, feeds engine & logging
Multi faceted responsive search, autocomplete, feeds engine & loggingMulti faceted responsive search, autocomplete, feeds engine & logging
Multi faceted responsive search, autocomplete, feeds engine & logginglucenerevolution
 
Why I want to Kazan
Why I want to KazanWhy I want to Kazan
Why I want to KazanProvectus
 
Gimme shelter: Tips on protecting proprietary and open source code
Gimme shelter: Tips on protecting proprietary and open source codeGimme shelter: Tips on protecting proprietary and open source code
Gimme shelter: Tips on protecting proprietary and open source codeRogue Wave Software
 
Solr Powered Libraries
Solr Powered LibrariesSolr Powered Libraries
Solr Powered LibrariesErik Hatcher
 
Meet Solr For The Tirst Again
Meet Solr For The Tirst AgainMeet Solr For The Tirst Again
Meet Solr For The Tirst AgainVarun Thacker
 
Apache Solr Changes the Way You Build Sites
Apache Solr Changes the Way You Build SitesApache Solr Changes the Way You Build Sites
Apache Solr Changes the Way You Build SitesPeter
 
Сергей Моренец: "Gradle. Write once, build everywhere"
Сергей Моренец: "Gradle. Write once, build everywhere"Сергей Моренец: "Gradle. Write once, build everywhere"
Сергей Моренец: "Gradle. Write once, build everywhere"Provectus
 
Call me maybe: Jepsen and flaky networks
Call me maybe: Jepsen and flaky networksCall me maybe: Jepsen and flaky networks
Call me maybe: Jepsen and flaky networksShalin Shekhar Mangar
 
Introduction to Solr
Introduction to SolrIntroduction to Solr
Introduction to SolrErik Hatcher
 
How to achieve security, reliability, and productivity in less time
How to achieve security, reliability, and productivity in less timeHow to achieve security, reliability, and productivity in less time
How to achieve security, reliability, and productivity in less timeRogue Wave Software
 
Дима Гадомский (Юскутум) “Можно ли позаимствовать дизайн и функционал так, чт...
Дима Гадомский (Юскутум) “Можно ли позаимствовать дизайн и функционал так, чт...Дима Гадомский (Юскутум) “Можно ли позаимствовать дизайн и функционал так, чт...
Дима Гадомский (Юскутум) “Можно ли позаимствовать дизайн и функционал так, чт...Provectus
 
Faceted Search And Result Reordering
Faceted Search And Result ReorderingFaceted Search And Result Reordering
Faceted Search And Result ReorderingVarun Thacker
 

Destaque (20)

Make your gui shine with ajax solr
Make your gui shine with ajax solrMake your gui shine with ajax solr
Make your gui shine with ajax solr
 
Open source applied: Real-world uses
Open source applied: Real-world usesOpen source applied: Real-world uses
Open source applied: Real-world uses
 
Solr Masterclass Bangkok, June 2014
Solr Masterclass Bangkok, June 2014Solr Masterclass Bangkok, June 2014
Solr Masterclass Bangkok, June 2014
 
What's New in Solr 3.x / 4.0
What's New in Solr 3.x / 4.0What's New in Solr 3.x / 4.0
What's New in Solr 3.x / 4.0
 
Introduction to Apache Solr
Introduction to Apache SolrIntroduction to Apache Solr
Introduction to Apache Solr
 
"Solr Update" at code4lib '13 - Chicago
"Solr Update" at code4lib '13 - Chicago"Solr Update" at code4lib '13 - Chicago
"Solr Update" at code4lib '13 - Chicago
 
Faceted Search – the 120 Million Documents Story
Faceted Search – the 120 Million Documents StoryFaceted Search – the 120 Million Documents Story
Faceted Search – the 120 Million Documents Story
 
Multi faceted responsive search, autocomplete, feeds engine & logging
Multi faceted responsive search, autocomplete, feeds engine & loggingMulti faceted responsive search, autocomplete, feeds engine & logging
Multi faceted responsive search, autocomplete, feeds engine & logging
 
Why I want to Kazan
Why I want to KazanWhy I want to Kazan
Why I want to Kazan
 
Gimme shelter: Tips on protecting proprietary and open source code
Gimme shelter: Tips on protecting proprietary and open source codeGimme shelter: Tips on protecting proprietary and open source code
Gimme shelter: Tips on protecting proprietary and open source code
 
Solr Powered Libraries
Solr Powered LibrariesSolr Powered Libraries
Solr Powered Libraries
 
Hackathon
HackathonHackathon
Hackathon
 
Meet Solr For The Tirst Again
Meet Solr For The Tirst AgainMeet Solr For The Tirst Again
Meet Solr For The Tirst Again
 
Apache Solr Changes the Way You Build Sites
Apache Solr Changes the Way You Build SitesApache Solr Changes the Way You Build Sites
Apache Solr Changes the Way You Build Sites
 
Сергей Моренец: "Gradle. Write once, build everywhere"
Сергей Моренец: "Gradle. Write once, build everywhere"Сергей Моренец: "Gradle. Write once, build everywhere"
Сергей Моренец: "Gradle. Write once, build everywhere"
 
Call me maybe: Jepsen and flaky networks
Call me maybe: Jepsen and flaky networksCall me maybe: Jepsen and flaky networks
Call me maybe: Jepsen and flaky networks
 
Introduction to Solr
Introduction to SolrIntroduction to Solr
Introduction to Solr
 
How to achieve security, reliability, and productivity in less time
How to achieve security, reliability, and productivity in less timeHow to achieve security, reliability, and productivity in less time
How to achieve security, reliability, and productivity in less time
 
Дима Гадомский (Юскутум) “Можно ли позаимствовать дизайн и функционал так, чт...
Дима Гадомский (Юскутум) “Можно ли позаимствовать дизайн и функционал так, чт...Дима Гадомский (Юскутум) “Можно ли позаимствовать дизайн и функционал так, чт...
Дима Гадомский (Юскутум) “Можно ли позаимствовать дизайн и функционал так, чт...
 
Faceted Search And Result Reordering
Faceted Search And Result ReorderingFaceted Search And Result Reordering
Faceted Search And Result Reordering
 

Semelhante a Rapid Prototyping with Solr

Dev8d Apache Solr Tutorial
Dev8d Apache Solr TutorialDev8d Apache Solr Tutorial
Dev8d Apache Solr TutorialSourcesense
 
Rapid prototyping with solr - By Erik Hatcher
Rapid prototyping with solr -  By Erik Hatcher Rapid prototyping with solr -  By Erik Hatcher
Rapid prototyping with solr - By Erik Hatcher lucenerevolution
 
Rapid prototyping search applications with solr
Rapid prototyping search applications with solrRapid prototyping search applications with solr
Rapid prototyping search applications with solrLucidworks (Archived)
 
How ElasticSearch lives in my DevOps life
How ElasticSearch lives in my DevOps lifeHow ElasticSearch lives in my DevOps life
How ElasticSearch lives in my DevOps life琛琳 饶
 
Introduction to Elasticsearch with basics of Lucene
Introduction to Elasticsearch with basics of LuceneIntroduction to Elasticsearch with basics of Lucene
Introduction to Elasticsearch with basics of LuceneRahul Jain
 
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)Doris Chen
 
Apache Lucene: Searching the Web and Everything Else (Jazoon07)
Apache Lucene: Searching the Web and Everything Else (Jazoon07)Apache Lucene: Searching the Web and Everything Else (Jazoon07)
Apache Lucene: Searching the Web and Everything Else (Jazoon07)dnaber
 
Webinar: What's New in Solr 6
Webinar: What's New in Solr 6Webinar: What's New in Solr 6
Webinar: What's New in Solr 6Lucidworks
 
Search Intelligence @elo7.com
Search Intelligence @elo7.comSearch Intelligence @elo7.com
Search Intelligence @elo7.comFernando Meyer
 
Introduction to Solr
Introduction to SolrIntroduction to Solr
Introduction to SolrJayesh Bhoyar
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...Fabio Franzini
 
Solr at zvents 6 years later & still going strong
Solr at zvents   6 years later & still going strongSolr at zvents   6 years later & still going strong
Solr at zvents 6 years later & still going stronglucenerevolution
 
Beyond full-text searches with Lucene and Solr
Beyond full-text searches with Lucene and SolrBeyond full-text searches with Lucene and Solr
Beyond full-text searches with Lucene and SolrBertrand Delacretaz
 
OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)
OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)
OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)Pat Patterson
 
Attack monitoring using ElasticSearch Logstash and Kibana
Attack monitoring using ElasticSearch Logstash and KibanaAttack monitoring using ElasticSearch Logstash and Kibana
Attack monitoring using ElasticSearch Logstash and KibanaPrajal Kulkarni
 
YQL:: Select * from Internet
YQL:: Select * from InternetYQL:: Select * from Internet
YQL:: Select * from Internetdrgath
 
YQL: Select * from Internet
YQL: Select * from InternetYQL: Select * from Internet
YQL: Select * from Internetdrgath
 
Advanced full text searching techniques using Lucene
Advanced full text searching techniques using LuceneAdvanced full text searching techniques using Lucene
Advanced full text searching techniques using LuceneAsad Abbas
 

Semelhante a Rapid Prototyping with Solr (20)

Dev8d Apache Solr Tutorial
Dev8d Apache Solr TutorialDev8d Apache Solr Tutorial
Dev8d Apache Solr Tutorial
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with Solr
 
Rapid prototyping with solr - By Erik Hatcher
Rapid prototyping with solr -  By Erik Hatcher Rapid prototyping with solr -  By Erik Hatcher
Rapid prototyping with solr - By Erik Hatcher
 
Rapid prototyping search applications with solr
Rapid prototyping search applications with solrRapid prototyping search applications with solr
Rapid prototyping search applications with solr
 
How ElasticSearch lives in my DevOps life
How ElasticSearch lives in my DevOps lifeHow ElasticSearch lives in my DevOps life
How ElasticSearch lives in my DevOps life
 
Introduction to Elasticsearch with basics of Lucene
Introduction to Elasticsearch with basics of LuceneIntroduction to Elasticsearch with basics of Lucene
Introduction to Elasticsearch with basics of Lucene
 
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
 
Apache Lucene Searching The Web
Apache Lucene Searching The WebApache Lucene Searching The Web
Apache Lucene Searching The Web
 
Apache Lucene: Searching the Web and Everything Else (Jazoon07)
Apache Lucene: Searching the Web and Everything Else (Jazoon07)Apache Lucene: Searching the Web and Everything Else (Jazoon07)
Apache Lucene: Searching the Web and Everything Else (Jazoon07)
 
Webinar: What's New in Solr 6
Webinar: What's New in Solr 6Webinar: What's New in Solr 6
Webinar: What's New in Solr 6
 
Search Intelligence @elo7.com
Search Intelligence @elo7.comSearch Intelligence @elo7.com
Search Intelligence @elo7.com
 
Introduction to Solr
Introduction to SolrIntroduction to Solr
Introduction to Solr
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
Solr at zvents 6 years later & still going strong
Solr at zvents   6 years later & still going strongSolr at zvents   6 years later & still going strong
Solr at zvents 6 years later & still going strong
 
Beyond full-text searches with Lucene and Solr
Beyond full-text searches with Lucene and SolrBeyond full-text searches with Lucene and Solr
Beyond full-text searches with Lucene and Solr
 
OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)
OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)
OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)
 
Attack monitoring using ElasticSearch Logstash and Kibana
Attack monitoring using ElasticSearch Logstash and KibanaAttack monitoring using ElasticSearch Logstash and Kibana
Attack monitoring using ElasticSearch Logstash and Kibana
 
YQL:: Select * from Internet
YQL:: Select * from InternetYQL:: Select * from Internet
YQL:: Select * from Internet
 
YQL: Select * from Internet
YQL: Select * from InternetYQL: Select * from Internet
YQL: Select * from Internet
 
Advanced full text searching techniques using Lucene
Advanced full text searching techniques using LuceneAdvanced full text searching techniques using Lucene
Advanced full text searching techniques using Lucene
 

Mais de Erik Hatcher

Solr Query Parsing
Solr Query ParsingSolr Query Parsing
Solr Query ParsingErik Hatcher
 
Query Parsing - Tips and Tricks
Query Parsing - Tips and TricksQuery Parsing - Tips and Tricks
Query Parsing - Tips and TricksErik Hatcher
 
Lucene for Solr Developers
Lucene for Solr DevelopersLucene for Solr Developers
Lucene for Solr DevelopersErik Hatcher
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with SolrErik Hatcher
 
Solr Flair: Search User Interfaces Powered by Apache Solr (ApacheCon US 2009,...
Solr Flair: Search User Interfaces Powered by Apache Solr (ApacheCon US 2009,...Solr Flair: Search User Interfaces Powered by Apache Solr (ApacheCon US 2009,...
Solr Flair: Search User Interfaces Powered by Apache Solr (ApacheCon US 2009,...Erik Hatcher
 
Solr Flair: Search User Interfaces Powered by Apache Solr
Solr Flair: Search User Interfaces Powered by Apache SolrSolr Flair: Search User Interfaces Powered by Apache Solr
Solr Flair: Search User Interfaces Powered by Apache SolrErik Hatcher
 

Mais de Erik Hatcher (9)

Ted Talk
Ted TalkTed Talk
Ted Talk
 
Solr Payloads
Solr PayloadsSolr Payloads
Solr Payloads
 
it's just search
it's just searchit's just search
it's just search
 
Solr Query Parsing
Solr Query ParsingSolr Query Parsing
Solr Query Parsing
 
Query Parsing - Tips and Tricks
Query Parsing - Tips and TricksQuery Parsing - Tips and Tricks
Query Parsing - Tips and Tricks
 
Lucene for Solr Developers
Lucene for Solr DevelopersLucene for Solr Developers
Lucene for Solr Developers
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with Solr
 
Solr Flair: Search User Interfaces Powered by Apache Solr (ApacheCon US 2009,...
Solr Flair: Search User Interfaces Powered by Apache Solr (ApacheCon US 2009,...Solr Flair: Search User Interfaces Powered by Apache Solr (ApacheCon US 2009,...
Solr Flair: Search User Interfaces Powered by Apache Solr (ApacheCon US 2009,...
 
Solr Flair: Search User Interfaces Powered by Apache Solr
Solr Flair: Search User Interfaces Powered by Apache SolrSolr Flair: Search User Interfaces Powered by Apache Solr
Solr Flair: Search User Interfaces Powered by Apache Solr
 

Último

A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxAna-Maria Mihalceanu
 
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...itnewsafrica
 
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sectoritnewsafrica
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialJoão Esperancinha
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructureitnewsafrica
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...amber724300
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Nikki Chapple
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Karmanjay Verma
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 

Último (20)

A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance Toolbox
 
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
 
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorial
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 

Rapid Prototyping with Solr

  • 1. Rapid Prototyping with Solr NFJS - Raleigh, August 2011 Presented by Erik Hatcher erik.hatcher@lucidimagination.com Lucid Imagination http://www.lucidimagination.com
  • 2. About me... • Co-author, "Lucene in Action" (and "Java Development with Ant" / "Ant in Action" once upon a time) • "Apache guy" - Lucene/Solr committer; member of Lucene PMC, member of Apache Software Foundation • Co-founder, evangelist, trainer, coder @ Lucid Imagination
  • 3. About Lucid Imagination... • Lucid Imagination provides commercial-grade support, training, high-level consulting and value- added software for Lucene and Solr. • We make Lucene ‘enterprise-ready’ by offering: • Free, certified, distributions and downloads. • Support, training, and consulting. • LucidWorks Enterprise, a commercial search platform built on top of Solr.
  • 4. Abstract Got data? Let's make it searchable! Rapid Prototyping with Solr will demonstrate getting documents into Solr quickly, provide some tips in adjusting Solr's schema to match your needs better, and finally will discuss how to showcase your data in a flexible search user interface. We'll see how to rapidly leverage faceting, highlighting, spell checking, and debugging. Even after all that, there will be enough time left to outline the next steps in developing your search application and taking it to production.
  • 5. What is Lucene? • An open source Java-based IR library with best practice indexing and query capabilities, fast and lightweight search and indexing. • 100% Java (.NET, Perl and other versions too). • Stable, mature API. • Continuously improved and tuned over more than 10 years. • Cleanly implemented, easy to embed in an application. • Compact, portable index representation. • Programmable text analyzers, spell checking and highlighting. • Not a crawler or a text extraction tool.
  • 6. Lucene's History • Created by Doug Cutting in 1999 • built on ideas from search projects Doug created at Xerox PARC and Apple. • Donated to the Apache Software Foundation (ASF) in 2001. • Became an Apache top-level project in 2005. • Has grown and morphed through the years and is now both: • A search library. • An ASF Top-Level Project (TLP) encompassing several sub-projects. • Lucene and Solr "merged" development in early 2010.
  • 7. What is Solr? • An open source search engine. • Indexes content sources, processes query requests, returns search results. • Uses Lucene as the "engine", but adds full enterprise search server features and capabilities. • A web-based application that processes HTTP requests and returns HTTP responses. • Initially started in 2004 and developed by CNET as an in-house project to add search capability for the company website. • Donated to ASF in 2006.
  • 8. What Version of Solr? • There’s more than one answer! • The current, released, stable version is 3.3 • The development release is referred to as “trunk”. • This is where the new, less tested work goes on • Also referred to as 4.0 • LucidWorks Enterprise is built on a trunk snapshot + additional features.
  • 9. Why prototype? • Demonstrate Solr can handle your needs • Stake/purse-holder buy-in • It's quick, easy, and fun! • The User Interface is the app
  • 10. Workflow • Ingest data • Use • Refine config/interactions, repeat
  • 11. Got Data? • Rich text files? • Databases? • Feeds (Atom/RSS/XML)? • 3rd party repositories? (SharePoint, Documentum, ...) • CSV!!!!
  • 13. Getting Started • Download Solr • http://lucene.apache.org/solr • "Install" it • unzip or tar -xvf • Start it • cd example; java -jar start.jar
  • 14. e.g. Conference Attendees First Name,Last Name,Company,Title,Work Country Erik,Hatcher,Lucid Imagination,"Member, Technical Staff", USA . . .
  • 16. Dynamic Fields <dynamicField name="*_s" type="string" indexed="true" stored="true"/> <dynamicField name="*_t" type="text" indexed="true" stored="true"/>
  • 18. uniqueKey • Optional, Solr-specific, feature • generally "string" type • schema.xml: <uniqueKey>id</uniqueKey> • adds of existing id'd documents updates (delete + add)
  • 19. id curl "http://localhost:8983/solr/update/csv ?stream.file=attendees.csv &fieldnames=first_s, id,company_s,title_t,co untry_s&header=true" <?xml version="1.0" encoding="UTF-8"?> <response> <lst name="responseHeader"> <int name="status">0</int> <int name="QTime">40</int> </lst> </response>
  • 20. Tada!
  • 21. Schema tinkering • Removed all example field definitions • Uncomment and adjust catch-all dynamic field: • <dynamicField name="*" type="string" multiValued="false"/> • Ensure uniqueKey is appropriate • unusual in this example, disabled it • Make every document/field fully searchable! • <copyField source="*" dest="text"/>
  • 22. After adjusting config... • Restart Solr • Or... reload the core (when in multicore mode)
  • 23. Clean import # Delete all documents curl "http://localhost:8983/solr/update?stream.body= %3Cdelete%3E%3Cquery %3E*:*%3C/query%3E%3C/delete %3E&commit=true" # Index your data curl "http://localhost:8983/solr/update/csv? commit=true&stream.file=EuroCon2010.csv&fieldnames=first ,last, company,title,country&header=true"
  • 25. Value Normalization • http://localhost:8983/solr/update/csv? commit=true&stream.file=attendees.csv&fi eldnames=first,last,company,title,country&h eader=true&f.country.map=Great +Britain:United+Kingdom
  • 26. Polishing • Customize request handler mappings • Edit templates • hit display • header/footer • style
  • 27. /browse <requestHandler name="/browse" class="solr.SearchHandler"> <lst name="defaults"> <str name="wt">velocity</str><str name="v.layout">layout</str> <str name="v.template">browse</str> <str name="rows">10</str><str name="fl">*,score</str> <str name="defType">lucene</str><str name="q">*:*</str> <str name="debugQuery">true</str> <str name="hl">on</str><str name="hl.fl">title</str> <str name="hl.fragsize">0</str> <str name="hl.alternateField">title</str> <str name="facet">on</str> <str name="facet.mincount">1</str> <str name="facet.missing">true</str> </lst> <lst name="appends"><str name="facet.field">country</str></lst> </requestHandler>
  • 28. hit.vm <div class="result-document"> <p>$doc.getFieldValue('first') $doc.getFieldValue('last')</p> <p>$!doc.getFieldValue('title'), $!doc.getFieldValue('company')</p> <p>$!doc.getFieldValue('country')</p> </div>
  • 30. Adding bells and whistles • jQuery • <script type="text/javascript" src="/solr/ admin/jquery.js"/> • TreeMap • <script type="text/javascript" src="/scripts/ treemap.js"/>
  • 31. TreeMap code <script type="text/javascript"> function onLoad() { jQuery("#treemap-country").treemap(640,480, {}); } </script> ---------------------------- <body onload="onLoad();"> ---------------------------- <table id="treemap-country"> #foreach($facet in $response.getFacetField('country').values) <tr> <td>#if($facet.name) $esc.html($facet.name)#else&lt;Unspecified&gt;#end</td> <td>$facet.count</td> <td>#if($facet.name)$esc.html($facet.name)#{else} Unspecified#end</td> </tr> #end </table>
  • 33. Ajax fun: giveaways • Add a "static" templated page • jQuery Ajax request • snippet templated output
  • 34. solrconfig.xml "static" page <requestHandler name="/giveaways" class="solr.DumpRequestHandler"> <lst name="defaults"> <str name="wt">velocity</str> <str name="v.template">giveaways</str> <str name="v.layout">layout</str> </lst> </requestHandler> giveaways.vm <input type="button" value="Pick a Winner" onClick="javascript:$ ('#winner').load('/solr/ generate_winner?sort=random_' + new Date().getTime() + '+asc');"> <h2>And the winner is...</h2> <center><font size="20"><div id="winner"></div></font></center>
  • 35. fragment template solrconfig.xml <requestHandler name="/generate_winner" class="solr.SearchHandler"> <!-- sort=random_... required --> <lst name="defaults"> <str name="wt">velocity</str> <str name="v.template">winner</str> <str name="rows">1</str> <str name="fl">first,last</str> <str name="defType">lucene</str> <str name="q">*:* -company:"Lucid Imagination" -company:"Stone Circle Productions"</str> </lst> </requestHandler> winner.vm #set($winner=$response.results.get(0)) $winner.getFieldValue('first') $winner.getFieldValue('last')
  • 36. And the winner is...
  • 38. Data.gov CSV catalog URL,Title,Agency,Subagency,Category,Date Released,Date Updated,Time Period,Frequency,Description,Data.gov Data Category Type,Specialized Data Category Designation,Keywords,Citation,Agency Program Page,Agency Data Series Page,Unit of Analysis,Granularity,Geographic Coverage,Collection Mode,Data Collection Instrument,Data Dictionary/Variable List,Applicable Agency Information Quality Guideline Designation,Data Quality Certification,Privacy and Confidentiality,Technical Documentation,Additional Metadata,FGDC Compliance (Geospatial Only),Statistical Methodology,Sampling,Estimation,Weighting,Disclosure Avoidance,Questionnaire Design,Series Breaks,Non-response Adjustment,Seasonal Adjustment,Statistical Characteristics,Feeds Access Point,Feeds File Size,XML Access Point,XML File Size,CSV/ TXT Access Point,CSV/TXT File Size,XLS Access Point,XLS File Size,KML/KMZ Access Point,KML File Size,ESRI Access Point,ESRI File Size,Map Access Point,Data Extraction Access Point,Widget Access Point "http://www.data.gov/details/4","Next Generation Radar (NEXRAD) Locations","Department of Commerce","National Oceanic and Atmospheric Administration","Geography and Environment","1991","Irregular as needed","1991 to present","Between 4 and 10 minutes","This geospatial rendering of weather radar sites gives access to an historical archive of Terminal Doppler Weather Radar data and is used primarily for research purposes. The archived data includes base data and derived products of the National Weather Service (NWS) Weather Surveillance Radar 88 Doppler (WSR-88D) next generation (NEXRAD) weather radar. Weather radar detects the three meteorological base data quantities: reflectivity, mean radial velocity, and spectrum width. From these quantities, computer processing generates numerous meteorological analysis products for forecasts, archiving and dissemination. There are 159 operational NEXRAD radar systems deployed throughout the United States and at selected overseas locations. At the Radar Operations Center (ROC) in Norman OK, personnel from the NWS, Air Force, Navy, and FAA use this distributed weather radar system to collect the data needed to warn of impending severe weather and possible flash floods; support air traffic safety and assist in the management of air traffic flow control; facilitate resource protection at military bases; and optimize the management of water, agriculture, forest, and snow removal. This data set is jointly owned by the National Oceanic and Atmospheric Administration, Federal Aviation Administration, and Department of Defense.","Raw Data Catalog",...
  • 39.
  • 41. Mapping field values • CSV update handler can map field values • &f.privacy_and_confidentiality.map=YES:Yes &f.data_quality_certification.map=YES:Yes
  • 42. Splitting keywords • CSV handler: f.keywords.split=true • stored values are split, multivalued • Or via schema • Stored value remains as in original, single valued <fieldType name="comma_separated" class="solr.TextField" omitNorms="true"> <analyzer> <tokenizer class="solr.PatternTokenizerFactory" pattern="s*,s*"/> </analyzer> </fieldType> ... <field name="keywords" type="comma_separated" indexed="true" stored="true"/>
  • 43. Suggest • Suggest terms as user types in search box • Technique: jQuery autocomplete, Solr’s TermsComponent,Velocity template http://localhost:8983/solr/terms ?terms.fl=suggest &terms.prefix=sola&terms.sort=count &wt=velocity&v.template=suggest #foreach($t in $response.response.terms.suggest) $t.key #end
  • 44. Suggest schema <fieldType name="suggestable" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.PatternReplaceFilterFactory" pattern="([^a-z])" replacement="" replace="all"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> </analyzer> </fieldType> ... <field name="suggest" type="suggestable" indexed="true" stored="false" multiValued="true"/>
  • 45. Custom pages • Document detail page • Multiple query intersection comparison with Venn visualization
  • 47. Document detail detail solrconfig.xml <requestHandler name="/data.gov/document" class="solr.SearchHandler"> <lst name="defaults"> <str name="wt">velocity</str> <str name="v.template">document</str> <str name="v.layout">layout</str> <str name="title">Data.gov data set</str> <str name="q">{!raw f=id v=$id}</str> </lst> </requestHandler> document.vm #set($doc= $response.results.get(0)) <span><a href="$doc.getFieldValue('id')">$doc.getFieldValue('id')</a></span> <table> #foreach($fieldname in $doc.fieldNames) <tr> <td>$fieldname:</td> <td> #foreach($value in $doc.getFieldValues($fieldname)) $esc.html($value) #end </td> </tr> #end </table>
  • 48. Query intersection • Just showing off.... how easy it is to do something with a bit of visual impact • Compare three independent queries, intersecting them in a Venn diagram visualization
  • 49.
  • 50. Compare static page solrconfig.xml <requestHandler name="/data.gov/compare" class="solr.DumpRequestHandler"> <lst name="defaults"> <str name="wt">velocity</str> <str name="v.template">compare</str> <str name="v.layout">layout</str> <str name="title">Data.gov Query Comparison</str> </lst> </requestHandler> compare.vm <script type="text/javascript"> function generate_venn() { var a=encodeURIComponent($("#a").val()); var b=encodeURIComponent($("#b").val()); var c=encodeURIComponent($("#c").val()); var ab='('+a+')+AND+('+b+')'; var ac='('+a+')+AND+('+c+')'; var bc='('+b+')+AND+('+c+')'; var abc='('+a+')+AND+('+b+')+AND+('+c+')'; $('#venn').load('/solr/select? q=*:*&wt=velocity&v.template=venn&rows=0&facet=on&facet.query={!key=a}'+a+'&facet.query={!key=b}'+b +'&facet.query={!key=c}'+c+'&facet.query={!key=intersect_ab}'+ab+'&facet.query={!key=intersect_ac}'+ac +'&facet.query={!key=intersect_bc}'+bc+'&facet.query={!key=intersect_abc}'+abc+'&q_a='+a+'&q_b='+b+'&q_c='+c +'&q_ab='+ab+'&q_ac='+ac+'&q_bc='+bc+'&q_abc='+abc); return false; } </script> <form action="#" id="compare_form" onsubmit="return generate_venn()"> A: <input type="text" name="a" id="a" value="health"/> B: <input type="text" name="b" id="b" value="weather"/> C: <input type="text" name="c" id="c" value="ozone"/> <input type="submit"/> </form> <div id="venn"></div>
  • 51. Venn chart venn.vm #set($values = $response.response.facet_counts.facet_queries) #set($params = $response.responseHeader.params) <img src="http://chart.apis.google.com/chart? chs=600x400&cht=v&chd=t:$values.a,$values.b,$values.c, $values.intersect_ab,$values.intersect_ac,$values.intersect_bc, $values.intersect_abc&chdl=$esc.url($params.q_a)|$esc.url ($params.q_b)|$esc.url($params.q_c)"/> <ul> <li>A: <a href="/solr/data.gov?q={!lucene}$params.q_a">$params.q_a</a> ($values.a)</li> <li>B: <a href="/solr/data.gov?q={!lucene}$params.q_b">$params.q_b</a> ($values.b)</li> <li>C: <a href="/solr/data.gov?q={!lucene}$params.q_c">$params.q_c</a> ($values.c)</li> <li>A&B: <a href="/solr/data.gov?q={!lucene}$params.q_ab">$params.q_ab</a> ($values.intersect_ab)</li> <li>A&C: <a href="/solr/data.gov?q={!lucene}$params.q_ac">$params.q_ac</a> ($values.intersect_ac)</li> <li>B&C: <a href="/solr/data.gov?q={!lucene}$params.q_bc">$params.q_bc</a> ($values.intersect_bc)</li> <li>A&B&C: <a href="/solr/data.gov?q={!lucene}$params.q_abc">$params.q_abc</a> ($values.intersect_abc)</li> </ul>
  • 52. Solritas • Pronounced: so-LAIR-uh-toss • Celeritas is a Latin word, translated as "swiftness" or "speed". It is often given as the origin of the symbol c, the universal notation for the speed of light - http:// en.wikipedia.org/wiki/Celeritas • VelocityResponseWriter - simply passes the Solr response through the Apache Velocity templating engine • http://wiki.apache.org/solr/VelocityResponseWriter
  • 53. Solr Flare • Ruby on Rails plugin • facet field detection, autosuggest, saved search, inverted facets, pie charts, Simile Timeline and Exhibit integration • Useful for rapid prototyping • See Flare's big brother, Blacklight, for production quality
  • 55. • UVA radiation = blacklight • libraries are much more than books • opinionated • Ruby on Rails: best choice for an extensible user interface development framework
  • 59. Prototyping Tools • CSV update handler - /update/csv • Schema Browser • Solritas, Flare, Blacklight, or... • just HTML+JavaScript (wt=json)
  • 60. Test • Performance • Scalability • Relevance • Automate all of the above, start baselines early, avoid regressions
  • 61. Then what? • Script the indexing process: full & delta • Work with real users on actual needs • Integrate with production systems • Iterate on schema enhancements, configuration tweaks such as caching • Deploy to staging/production environments and work at scale: collection size, real queries and performance, hardware and JVM settings
  • 63. For more information... • http://www.lucidimagination.com • LucidFind • search Lucene ecosystem: mailing lists, wikis, JIRA, etc • http://search.lucidimagination.com • Getting started with LucidWorks Enterprise: • http://www.lucidimagination.com/products/ lucidworks-search-platform/enterprise • http://lucene.apache.org/solr - wiki, e-mail lists