SlideShare a Scribd company logo
1 of 21
Download to read offline
SCHEMALESS SOLR
AND THE SOLR SCHEMA REST API

Steve Rowe
Twitter: @steven_a_rowe

Senior Software Engineer, LucidWorks
Who am I?
• 
• 
• 
• 

LucidWorks employee
Lucene/Solr committer since 2010
JFlex committer since 2008
Previously at the Center for Natural Language Processing
at Syracuse University’s iSchool (School of Information)

•  Twitter: @steven_a_rowe
Schemaless Solr
• 

As of version 4.4, Solr can operate in
schemaless mode:
–  No need to pre-configure fields in the
schema
–  As documents are indexed, previously
unknown fields are automatically added
to the schema
–  Field types are auto-detected from a
limited set of basic types:
•  Long, Double, Boolean, Date, Text
(default)
•  All are multi-valued
–  Works in standalone Solr and SolrCloud

• 

Solr features used to implement
schemaless mode:
–  Managed schema
•  Required for runtime
schema modification
–  Field value class guessing
•  Parsers attempt to detect
the Java class of Stringvalued field content
–  Automatic schema field
addition
•  Java class(es) mapped to
schema field type
The slide about the nature and utility of schemalessness
• 
• 

• 

“Schemaless” does not mean that there is no schema
Search applications need schemas to support non-trivial document models
–  No schema needed when there is only one field, or only one field type, i.e. all
fields share:
•  Document & query processing, including analysis
•  Index features & format
•  Similarity implementation
•  (etc.)
–  Otherwise, search apps need to manage per-field processing configuration (i.e.
a schema) to consistently index documents and effectively serve queries
So what does “schemaless” mean for Solr?
–  No up-front schema configuration required
–  Schema discovery: document structure is either not fixed or not fully known
Dynamic fields
• 
• 

Convention over configuration
Glob-like patterns match field names with field types
!

<dynamicField name="*_i" type="int" indexed="true” stored="true"/>!
<fieldType name="int" class="solr.TrieIntField"!
precisionStep="0" positionIncrementGap="0"/>!
!

• 
• 
• 
• 

Dynamic fields solve the problem of assigning field types to unknown fields by
inferring a field’s type from its name
By contrast, Solr’s schemaless mode infers an unknown field’s type from its value
or values
These two approaches are complementary
The Solr schemaless example defines a number of dynamic fields, including the
*_i ! int mapping above
Schemaless mode example
From example/example-schemaless/solr/collection1/conf/schema.xml:
!

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />!
<field name="_version_" type="long" indexed="true" stored="true"/>!

From example/exampledocs/books.csv:
id,cat,name,price,inStock,author,series_t,sequence_i,genre_s!
0441385532,book,Jhereg,7.95,false,Steven Brust,Vlad Taltos,1,fantasy!
...!

!
$ cd example && java -Dsolr.solr.home=example-schemaless/solr -jar start.jar!
!

$ cd exampledocs && java -Dtype=text/csv -jar post.jar books.csv!
!

SimplePostTool version 1.5!
Posting files to base url http://localhost:8983/solr/update using content-type text/csv..!
POSTing file books.csv!
1 files indexed.!
COMMITting Solr index changes to http://localhost:8983/solr/update..!
Time spent: 0:00:00.147!
Schemaless mode example
$ curl http://localhost:8983/solr/schema/fields!
!

{ "fields":[{
{
{
{

"name":"_version_",
"name":"author",
"name":"cat",
"name":"id",

{ "name":"inStock",
{ "name":"name",
{ "name":"price",
!
id!
cat!
!
!
0441385532! book!
!

"type":"long",
"indexed":true, "stored":true
},!
"type":"text_general"
},!
"type":"text_general"
},!
"type":"string",
"multiValued":false, "indexed":true,!
"required":true,
"stored":true,!
"uniqueKey":true
},!
"type":"booleans"
},!
"type":"text_general"
},!
"type":"tdoubles"
}]}!

name!

price!

inStock!

author!

series_t!

sequence_i! genre_s!

Jhereg!

7.95!

false!

Steven
Brust!

Vlad
Taltos!

1!

fantasy!

!

From example/example-schemaless/solr/collection1/conf/schema.xml:
!

<fieldType name="booleans" class="solr.BoolField" sortMissingLast="true" multiValued="true"/>!
<fieldType name="tdoubles" class="solr.TrieDoubleField" precisionStep="8" !
positionIncrementGap="0" multiValued="true"/>!

!
Managed schema
• 
• 
• 
• 
• 

The schema resource is managed by
Solr, rather than hand edited
On first startup, Solr auto-converts
schema.xml to managed-schema
Managed schema format is currently
XML, but may change in the future
XML comments don’t survive the
conversion.
mutable=true enables runtime
schema modification
–  Automatic schema field addition
–  Schema REST API

From example/example-schemaless/solr/collection1/conf/solrconfig.xml:
!

<schemaFactory class="ManagedIndexSchemaFactory">!
<bool name="mutable">true</bool>!
<str name="managedSchemaResourceName">managed-schema</str>!
</schemaFactory>!

conf/ before startup
currency.xml!
elevate.xml!
lang/!
protwords.txt!
schema.xml!
solrconfig.xml!
stopwords.txt!
synonyms.txt!

conf/ after startup
currency.xml!
elevate.xml!
lang/!
managed-schema!
protwords.txt!
schema.xml.bak!
solrconfig.xml!
stopwords.txt!
synonyms.txt!
Field value class guessing
• 

• 

Unknown fields’ String-typed values
are speculatively parsed
–  Cascading parsers attempt to
recognize field values
–  On failure, the next one is tried
–  First successful parse wins
Reconfigurable
–  Integer parser could be swapped
in for the Long parser, etc.
–  Numeric parsers can take a locale
for java.text.NumberFormat!
–  Date parser, implemented using
Joda-Time, can be configured with
other patterns, a locale, and/or a
default time zone

<updateRequestProcessorChain name="add-unknown-fields-to-the-schema">!
<processor class="solr.RemoveBlankFieldUpdateProcessorFactory"/>!
<processor class="solr.ParseBooleanFieldUpdateProcessorFactory"/>!
<processor class="solr.ParseLongFieldUpdateProcessorFactory"/>!
<processor class="solr.ParseDoubleFieldUpdateProcessorFactory"/>!
<processor class="solr.ParseDateFieldUpdateProcessorFactory">!
<arr name="format">!
<str>yyyy-MM-dd'T'HH:mm:ss.SSSZ</str>!
<str>yyyy-MM-dd'T'HH:mm:ss,SSSZ</str>!
<str>yyyy-MM-dd'T'HH:mm:ss.SSS</str>!
<str>yyyy-MM-dd'T'HH:mm:ss,SSS</str>!
<str>yyyy-MM-dd'T'HH:mm:ssZ</str>!
<str>yyyy-MM-dd'T'HH:mm:ss</str>!
<str>yyyy-MM-dd'T'HH:mmZ</str>!
<str>yyyy-MM-dd'T'HH:mm</str>!
<str>yyyy-MM-dd HH:mm:ss.SSSZ</str>!
<str>yyyy-MM-dd HH:mm:ss,SSSZ</str>!
<str>yyyy-MM-dd HH:mm:ss.SSS</str>!
<str>yyyy-MM-dd HH:mm:ss,SSS</str>!
<str>yyyy-MM-dd HH:mm:ssZ</str>!
<str>yyyy-MM-dd HH:mm:ss</str>!
<str>yyyy-MM-dd HH:mmZ</str>!
<str>yyyy-MM-dd HH:mm</str>!
<str>yyyy-MM-dd</str>!
</arr>!
</processor>!
!
Automatic schema field addition
• 
• 
• 

• 

• 
• 

Field value classes are mapped to
field types
First match wins
If none of the typeMapping-s
match, the default field type is
assigned
If a multi-valued field contains a
mix of value classes, the first
mapping that matches all values’
classes wins
The new field is added to the
schema with the mapped field type
Reconfigurable

<processor class="solr.AddSchemaFieldsUpdateProcessorFactory">!
<str name="defaultFieldType">text_general</str>!
<lst name="typeMapping">!
<str name="valueClass">java.lang.Boolean</str>!
<str name="fieldType">booleans</str>!
</lst>!
<lst name="typeMapping">!
<str name="valueClass">java.util.Date</str>!
<str name="fieldType">tdates</str>!
</lst>!
<lst name="typeMapping">!
<str name="valueClass">java.lang.Long</str>!
<str name="valueClass">java.lang.Integer</str>!
<str name="fieldType">tlongs</str>!
</lst>!
<lst name="typeMapping">!
<str name="valueClass">java.lang.Number</str>!
<str name="fieldType">tdoubles</str>!
</lst>!
</processor>!
Schemaless mode limitations
• 
• 
• 
• 
• 
• 

Automatically adding new schema fields in production may not be a good idea
–  Unwanted fields, e.g. field name typos, won’t trigger an error
First instance wins: field type detection can’t know about the full range of a field’s
values
Wasted space: e.g. Longs are always used, when Integers might suffice
Limited gamut of detectable field types
Single analysis specification for text fields
Single processing model for all fields
Schema REST API
Schema REST API: read-only
• 
• 
• 

• 

Each element of the schema is individually readable via the Schema REST API
Output format can be JSON or XML (wt request param)
Read-only elements:
–  The entire schema
•  In addition to JSON and XML output formats, output can also be in
schema.xml format (?wt=schema.xml)
–  All fields, or a specified set of them
–  All dynamic fields, or a specified set of them
–  All field types, or a specific one
–  All copy field directives
–  The schema name, version, uniqueKey, and default query operator
–  The global similarity
Managed schema is not required to use the read-only schema REST API.
Schema REST API: read-only examples
$ SOLR=http://localhost:8983/solr/collection1!
!
$ curl $SOLR/schema/dynamicfields/*_i!

!
!
$ curl $SOLR/schema/uniquekey?wt=xml!

!

!

{!

<?xml version="1.0" encoding="UTF-8"?>!
<response>!
<lst name="responseHeader">!
<int name="status">0</int>!
<int name="QTime">1</int>!
</lst>!
<str name="uniqueKey">id</str>!
</response>!

"responseHeader":{!
"status":0,!
"QTime":1},!
"dynamicField":{!
"name":"*_i",!
"type":"int",!
"indexed":true,!
"stored":true}}!

• 

Schema REST API URLs employ the downcased form of all schema elements, but the
responses use the same casing as schema.xml.

• 

For full details on the Solr Schema REST API, see the Schema API section of the Solr
Reference Guide: https://cwiki.apache.org/confluence/display/solr/Schema+API
Schema REST API: runtime schema modification
• 
• 

• 

• 

• 

To enable schema modification via the schema REST API, the schema must be
managed, and must be configured as mutable.
Schema modifications possible as of Solr 4.4:
–  Fields may be added
•  Copy field directives may optionally be added at the same time
–  Copy field directives may be added
Works under both standalone Solr and SolrCloud
–  Under SolrCloud, conflicting simultaneous requests are detected using a form of
optimistic concurrency and automatically retried
Core/collection reload not required for schema modifications that are compatible with
previously indexed documents
–  Generally additions are not sources of schema incompatibility
Schema incompatibility-inducing operations will require core/collection reload:
–  Modifying or removing (dynamic) fields or copy field directives
–  Modifying all other schema elements
Schema REST API: add field example
$ SOLR=http://localhost:8983/solr/collection1!
!
$ curl $SOLR/schema/fields/claimid -X PUT -H 'Content-type: application/json' --data-binary '!
{ !
"type":"string",!
"stored":true,!
"copyFields": [ !
"claims", !
"all"!
]!
}’!
!

• 
• 

The copyField destinations “claims” and “all” must already exist in the schema.
For full details on the Solr Schema REST API, see the Schema API section of the Solr

Reference Guide: https://cwiki.apache.org/confluence/display/solr/Schema+API
Schema REST API TODOs
• 

https://issues.apache.org/jira/browse/SOLR-4898 is the umbrella JIRA issue
under which further schema REST API work will be done, including:
–  adding dynamic fields
–  adding field types
–  enabling wholesale replacement by PUTing a new schema.
–  modifying and removing fields, dynamic fields, field types, and copy field
directives
–  modifying all remaining aspects of the schema: Name, Version, Unique Key,
Global Similarity, and Default Query Operator
Proposal: Schema Annotations
• 
• 
• 

• 

Add arbitrary metadata at the top level of the schema and at each leaf node
Allow read/write access to that metadata via the REST API.
Uses cases:
–  Round-trippable documentation
•  Conversion to managed schema format drops all comments
–  Documentable tags
–  When modifying the schema via REST API, a "last-modified" annotation could
be automatically added.
–  User-level arbitrary key/value metadata
W3C XML Schema has a similar facility:
http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/
structures.html#element-annotation
Schema Annotation example
<schema name="example" version="1.5">!
 <annotation>!
   <description element="tag" !
content="plain-numeric-field-types">!
     Plain numeric field types store and index the!
text value verbatim.!
   </description>!
   <documentation element="copyField">!
     copyField commands copy one field to another at!
the time a document is added to the index.  It's!
used either to index the same field differently,!
     or to add multiple fields to the same field for!
easier/faster searching.!
   </documentation>!
   <last-modified>2014-03-08T12:14:02Z</last-modified>!
   …!
 </annotation>!
…!

 <fieldType name="pint" class="solr.IntField">!
   <annotation>!
     <tag>plain-numeric-field-types</tag>!
   </annotation>!
 </fieldType>!
 <fieldType name="plong" class="solr.LongField">!
   <annotation>!
     <tag>plain-numeric-field-types</tag>!
   </annotation>!
 </fieldType>!
 …!
 <copyField source="cat" dest="text">!
   <annotation>!
     <todo>Copy to the catchall field?</todo>!
   </annotation>!
 </copyField>!
 …!
 <field name="text" type="text_general">!
   <annotation>!
     <description>catchall field</description>!
     <visibility>public</visibility>!
   </annotation>!
 </field>!
Summary
• 

Schemaless Solr mode enables quick prototyping with minimal setup

• 
• 

Schema REST API provides programmatic read/write access to Solr’s schema
More elements writeable soon

• 

Schema annotations would enable round-trippable documentation, tagging, and
arbitrary user-provided metadata

More Related Content

What's hot

Apache Solr + ajax solr
Apache Solr + ajax solrApache Solr + ajax solr
Apache Solr + ajax solrNet7
 
Solr 6 Feature Preview
Solr 6 Feature PreviewSolr 6 Feature Preview
Solr 6 Feature PreviewYonik Seeley
 
Mastering solr
Mastering solrMastering solr
Mastering solrjurcello
 
20130310 solr tuorial
20130310 solr tuorial20130310 solr tuorial
20130310 solr tuorialChris Huang
 
Solr vs. Elasticsearch, Case by Case: Presented by Alexandre Rafalovitch, UN
Solr vs. Elasticsearch,  Case by Case: Presented by Alexandre Rafalovitch, UNSolr vs. Elasticsearch,  Case by Case: Presented by Alexandre Rafalovitch, UN
Solr vs. Elasticsearch, Case by Case: Presented by Alexandre Rafalovitch, UNLucidworks
 
Searching for AI - Leveraging Solr for classic Artificial Intelligence tasks
Searching for AI - Leveraging Solr for classic Artificial Intelligence tasksSearching for AI - Leveraging Solr for classic Artificial Intelligence tasks
Searching for AI - Leveraging Solr for classic Artificial Intelligence tasksAlexandre Rafalovitch
 
Lucene for Solr Developers
Lucene for Solr DevelopersLucene for Solr Developers
Lucene for Solr DevelopersErik Hatcher
 
Elastic search apache_solr
Elastic search apache_solrElastic search apache_solr
Elastic search apache_solrmacrochen
 
From content to search: speed-dating Apache Solr (ApacheCON 2018)
From content to search: speed-dating Apache Solr (ApacheCON 2018)From content to search: speed-dating Apache Solr (ApacheCON 2018)
From content to search: speed-dating Apache Solr (ApacheCON 2018)Alexandre Rafalovitch
 
Solr Powered Lucene
Solr Powered LuceneSolr Powered Lucene
Solr Powered LuceneErik Hatcher
 
Solr Indexing and Analysis Tricks
Solr Indexing and Analysis TricksSolr Indexing and Analysis Tricks
Solr Indexing and Analysis TricksErik Hatcher
 
Solr Recipes Workshop
Solr Recipes WorkshopSolr Recipes Workshop
Solr Recipes WorkshopErik Hatcher
 
Solr Black Belt Pre-conference
Solr Black Belt Pre-conferenceSolr Black Belt Pre-conference
Solr Black Belt Pre-conferenceErik Hatcher
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with SolrErik Hatcher
 

What's hot (20)

JSON in Solr: from top to bottom
JSON in Solr: from top to bottomJSON in Solr: from top to bottom
JSON in Solr: from top to bottom
 
Apache Solr + ajax solr
Apache Solr + ajax solrApache Solr + ajax solr
Apache Solr + ajax solr
 
Solr 6 Feature Preview
Solr 6 Feature PreviewSolr 6 Feature Preview
Solr 6 Feature Preview
 
Apache Solr Workshop
Apache Solr WorkshopApache Solr Workshop
Apache Solr Workshop
 
Solr workshop
Solr workshopSolr workshop
Solr workshop
 
Mastering solr
Mastering solrMastering solr
Mastering solr
 
20130310 solr tuorial
20130310 solr tuorial20130310 solr tuorial
20130310 solr tuorial
 
Solr vs. Elasticsearch, Case by Case: Presented by Alexandre Rafalovitch, UN
Solr vs. Elasticsearch,  Case by Case: Presented by Alexandre Rafalovitch, UNSolr vs. Elasticsearch,  Case by Case: Presented by Alexandre Rafalovitch, UN
Solr vs. Elasticsearch, Case by Case: Presented by Alexandre Rafalovitch, UN
 
Searching for AI - Leveraging Solr for classic Artificial Intelligence tasks
Searching for AI - Leveraging Solr for classic Artificial Intelligence tasksSearching for AI - Leveraging Solr for classic Artificial Intelligence tasks
Searching for AI - Leveraging Solr for classic Artificial Intelligence tasks
 
it's just search
it's just searchit's just search
it's just search
 
Solr Introduction
Solr IntroductionSolr Introduction
Solr Introduction
 
Lucene for Solr Developers
Lucene for Solr DevelopersLucene for Solr Developers
Lucene for Solr Developers
 
Apache Solr
Apache SolrApache Solr
Apache Solr
 
Elastic search apache_solr
Elastic search apache_solrElastic search apache_solr
Elastic search apache_solr
 
From content to search: speed-dating Apache Solr (ApacheCON 2018)
From content to search: speed-dating Apache Solr (ApacheCON 2018)From content to search: speed-dating Apache Solr (ApacheCON 2018)
From content to search: speed-dating Apache Solr (ApacheCON 2018)
 
Solr Powered Lucene
Solr Powered LuceneSolr Powered Lucene
Solr Powered Lucene
 
Solr Indexing and Analysis Tricks
Solr Indexing and Analysis TricksSolr Indexing and Analysis Tricks
Solr Indexing and Analysis Tricks
 
Solr Recipes Workshop
Solr Recipes WorkshopSolr Recipes Workshop
Solr Recipes Workshop
 
Solr Black Belt Pre-conference
Solr Black Belt Pre-conferenceSolr Black Belt Pre-conference
Solr Black Belt Pre-conference
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with Solr
 

Viewers also liked

Inside Solr 5 - Bangalore Solr/Lucene Meetup
Inside Solr 5 - Bangalore Solr/Lucene MeetupInside Solr 5 - Bangalore Solr/Lucene Meetup
Inside Solr 5 - Bangalore Solr/Lucene MeetupShalin Shekhar Mangar
 
Front End Good Practices
Front End Good PracticesFront End Good Practices
Front End Good PracticesHernan Mammana
 
High Performance JSON Search and Relational Faceted Browsing with Lucene
High Performance JSON Search and Relational Faceted Browsing with LuceneHigh Performance JSON Search and Relational Faceted Browsing with Lucene
High Performance JSON Search and Relational Faceted Browsing with Lucenelucenerevolution
 
Semantic & Multilingual Strategies in Lucene/Solr
Semantic & Multilingual Strategies in Lucene/SolrSemantic & Multilingual Strategies in Lucene/Solr
Semantic & Multilingual Strategies in Lucene/SolrTrey Grainger
 
distributed tracing in 5 minutes
distributed tracing in 5 minutesdistributed tracing in 5 minutes
distributed tracing in 5 minutesDan Kuebrich
 
The Java Microservice Library
The Java Microservice LibraryThe Java Microservice Library
The Java Microservice LibraryRick Hightower
 
Enhance existing REST APIs (e.g. Facebook Graph API) with code completion us...
Enhance existing REST APIs  (e.g. Facebook Graph API) with code completion us...Enhance existing REST APIs  (e.g. Facebook Graph API) with code completion us...
Enhance existing REST APIs (e.g. Facebook Graph API) with code completion us...johannes_fiala
 
Cross Datacenter Replication in Apache Solr 6
Cross Datacenter Replication in Apache Solr 6Cross Datacenter Replication in Apache Solr 6
Cross Datacenter Replication in Apache Solr 6Shalin Shekhar Mangar
 
Building Distributed Systems with Netflix OSS and Spring Cloud
Building Distributed Systems with Netflix OSS and Spring CloudBuilding Distributed Systems with Netflix OSS and Spring Cloud
Building Distributed Systems with Netflix OSS and Spring CloudMatt Stine
 
CQRS + Event Sourcing
CQRS + Event SourcingCQRS + Event Sourcing
CQRS + Event SourcingMike Bild
 
Apache SOLR in AEM 6
Apache SOLR in AEM 6Apache SOLR in AEM 6
Apache SOLR in AEM 6Yash Mody
 
Reflected Intelligence - Lucene/Solr as a self-learning data system: Presente...
Reflected Intelligence - Lucene/Solr as a self-learning data system: Presente...Reflected Intelligence - Lucene/Solr as a self-learning data system: Presente...
Reflected Intelligence - Lucene/Solr as a self-learning data system: Presente...Lucidworks
 
Nested and Parent/Child Docs in ElasticSearch
Nested and Parent/Child Docs in ElasticSearchNested and Parent/Child Docs in ElasticSearch
Nested and Parent/Child Docs in ElasticSearchBeyondTrees
 
Rebuilding Solr 6 Examples - Layer by Layer: Presented by Alexandre Rafalovit...
Rebuilding Solr 6 Examples - Layer by Layer: Presented by Alexandre Rafalovit...Rebuilding Solr 6 Examples - Layer by Layer: Presented by Alexandre Rafalovit...
Rebuilding Solr 6 Examples - Layer by Layer: Presented by Alexandre Rafalovit...Lucidworks
 
Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6DEEPAK KHETAWAT
 
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and HydraBuilding Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and HydraMarkus Lanthaler
 

Viewers also liked (20)

Inside Solr 5 - Bangalore Solr/Lucene Meetup
Inside Solr 5 - Bangalore Solr/Lucene MeetupInside Solr 5 - Bangalore Solr/Lucene Meetup
Inside Solr 5 - Bangalore Solr/Lucene Meetup
 
Reactive Architectures
Reactive ArchitecturesReactive Architectures
Reactive Architectures
 
Front End Good Practices
Front End Good PracticesFront End Good Practices
Front End Good Practices
 
High Performance JSON Search and Relational Faceted Browsing with Lucene
High Performance JSON Search and Relational Faceted Browsing with LuceneHigh Performance JSON Search and Relational Faceted Browsing with Lucene
High Performance JSON Search and Relational Faceted Browsing with Lucene
 
Semantic & Multilingual Strategies in Lucene/Solr
Semantic & Multilingual Strategies in Lucene/SolrSemantic & Multilingual Strategies in Lucene/Solr
Semantic & Multilingual Strategies in Lucene/Solr
 
RPC protocols
RPC protocolsRPC protocols
RPC protocols
 
distributed tracing in 5 minutes
distributed tracing in 5 minutesdistributed tracing in 5 minutes
distributed tracing in 5 minutes
 
The Java Microservice Library
The Java Microservice LibraryThe Java Microservice Library
The Java Microservice Library
 
Enhance existing REST APIs (e.g. Facebook Graph API) with code completion us...
Enhance existing REST APIs  (e.g. Facebook Graph API) with code completion us...Enhance existing REST APIs  (e.g. Facebook Graph API) with code completion us...
Enhance existing REST APIs (e.g. Facebook Graph API) with code completion us...
 
Cross Datacenter Replication in Apache Solr 6
Cross Datacenter Replication in Apache Solr 6Cross Datacenter Replication in Apache Solr 6
Cross Datacenter Replication in Apache Solr 6
 
SolrCloud and Shard Splitting
SolrCloud and Shard SplittingSolrCloud and Shard Splitting
SolrCloud and Shard Splitting
 
Building Distributed Systems with Netflix OSS and Spring Cloud
Building Distributed Systems with Netflix OSS and Spring CloudBuilding Distributed Systems with Netflix OSS and Spring Cloud
Building Distributed Systems with Netflix OSS and Spring Cloud
 
Something about Kafka - Why Kafka is so fast
Something about Kafka - Why Kafka is so fastSomething about Kafka - Why Kafka is so fast
Something about Kafka - Why Kafka is so fast
 
CQRS + Event Sourcing
CQRS + Event SourcingCQRS + Event Sourcing
CQRS + Event Sourcing
 
Apache SOLR in AEM 6
Apache SOLR in AEM 6Apache SOLR in AEM 6
Apache SOLR in AEM 6
 
Reflected Intelligence - Lucene/Solr as a self-learning data system: Presente...
Reflected Intelligence - Lucene/Solr as a self-learning data system: Presente...Reflected Intelligence - Lucene/Solr as a self-learning data system: Presente...
Reflected Intelligence - Lucene/Solr as a self-learning data system: Presente...
 
Nested and Parent/Child Docs in ElasticSearch
Nested and Parent/Child Docs in ElasticSearchNested and Parent/Child Docs in ElasticSearch
Nested and Parent/Child Docs in ElasticSearch
 
Rebuilding Solr 6 Examples - Layer by Layer: Presented by Alexandre Rafalovit...
Rebuilding Solr 6 Examples - Layer by Layer: Presented by Alexandre Rafalovit...Rebuilding Solr 6 Examples - Layer by Layer: Presented by Alexandre Rafalovit...
Rebuilding Solr 6 Examples - Layer by Layer: Presented by Alexandre Rafalovit...
 
Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6
 
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and HydraBuilding Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and Hydra
 

Similar to Schemaless Solr and the Solr Schema REST API

Solr/Elasticsearch for CF Developers (and others)
Solr/Elasticsearch for CF Developers (and others)Solr/Elasticsearch for CF Developers (and others)
Solr/Elasticsearch for CF Developers (and others)Mary Jo Sminkey
 
Apache Solr - Enterprise search platform
Apache Solr - Enterprise search platformApache Solr - Enterprise search platform
Apache Solr - Enterprise search platformTommaso Teofili
 
Adobe Flash Actionscript language basics chapter-2
Adobe Flash Actionscript language basics chapter-2Adobe Flash Actionscript language basics chapter-2
Adobe Flash Actionscript language basics chapter-2Nafis Ahmed
 
Lucene for Solr Developers
Lucene for Solr DevelopersLucene for Solr Developers
Lucene for Solr DevelopersErik Hatcher
 
Apache Solr crash course
Apache Solr crash courseApache Solr crash course
Apache Solr crash courseTommaso Teofili
 
Programming in java basics
Programming in java  basicsProgramming in java  basics
Programming in java basicsLovelitJose
 
IT talk SPb "Full text search for lazy guys"
IT talk SPb "Full text search for lazy guys" IT talk SPb "Full text search for lazy guys"
IT talk SPb "Full text search for lazy guys" DataArt
 
SFDC Introduction to Apex
SFDC Introduction to ApexSFDC Introduction to Apex
SFDC Introduction to ApexSujit Kumar
 
Solr Query Parsing
Solr Query ParsingSolr Query Parsing
Solr Query ParsingErik Hatcher
 
Android webinar class_java_review
Android webinar class_java_reviewAndroid webinar class_java_review
Android webinar class_java_reviewEdureka!
 
Core java complete ppt(note)
Core java  complete  ppt(note)Core java  complete  ppt(note)
Core java complete ppt(note)arvind pandey
 
Query Parsing - Tips and Tricks
Query Parsing - Tips and TricksQuery Parsing - Tips and Tricks
Query Parsing - Tips and TricksErik Hatcher
 
Apache Solr 1.4 – Faster, Easier, and More Versatile than Ever
Apache Solr 1.4 – Faster, Easier, and More Versatile than EverApache Solr 1.4 – Faster, Easier, and More Versatile than Ever
Apache Solr 1.4 – Faster, Easier, and More Versatile than EverLucidworks (Archived)
 
Parallel SQL and Streaming Expressions in Apache Solr 6
Parallel SQL and Streaming Expressions in Apache Solr 6Parallel SQL and Streaming Expressions in Apache Solr 6
Parallel SQL and Streaming Expressions in Apache Solr 6Shalin Shekhar Mangar
 
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)Kai Chan
 

Similar to Schemaless Solr and the Solr Schema REST API (20)

Solr/Elasticsearch for CF Developers (and others)
Solr/Elasticsearch for CF Developers (and others)Solr/Elasticsearch for CF Developers (and others)
Solr/Elasticsearch for CF Developers (and others)
 
Apache Solr - Enterprise search platform
Apache Solr - Enterprise search platformApache Solr - Enterprise search platform
Apache Solr - Enterprise search platform
 
What's new in solr june 2014
What's new in solr june 2014What's new in solr june 2014
What's new in solr june 2014
 
Adobe Flash Actionscript language basics chapter-2
Adobe Flash Actionscript language basics chapter-2Adobe Flash Actionscript language basics chapter-2
Adobe Flash Actionscript language basics chapter-2
 
Lucene for Solr Developers
Lucene for Solr DevelopersLucene for Solr Developers
Lucene for Solr Developers
 
Apache Solr crash course
Apache Solr crash courseApache Solr crash course
Apache Solr crash course
 
Programming in java basics
Programming in java  basicsProgramming in java  basics
Programming in java basics
 
Soap2
Soap2Soap2
Soap2
 
IT talk SPb "Full text search for lazy guys"
IT talk SPb "Full text search for lazy guys" IT talk SPb "Full text search for lazy guys"
IT talk SPb "Full text search for lazy guys"
 
SFDC Introduction to Apex
SFDC Introduction to ApexSFDC Introduction to Apex
SFDC Introduction to Apex
 
OpenCms Days 2014 - Using the SOLR collector
OpenCms Days 2014 - Using the SOLR collectorOpenCms Days 2014 - Using the SOLR collector
OpenCms Days 2014 - Using the SOLR collector
 
Solr Query Parsing
Solr Query ParsingSolr Query Parsing
Solr Query Parsing
 
Android webinar class_java_review
Android webinar class_java_reviewAndroid webinar class_java_review
Android webinar class_java_review
 
Solr5
Solr5Solr5
Solr5
 
Core java complete ppt(note)
Core java  complete  ppt(note)Core java  complete  ppt(note)
Core java complete ppt(note)
 
Query Parsing - Tips and Tricks
Query Parsing - Tips and TricksQuery Parsing - Tips and Tricks
Query Parsing - Tips and Tricks
 
Apache Solr 1.4 – Faster, Easier, and More Versatile than Ever
Apache Solr 1.4 – Faster, Easier, and More Versatile than EverApache Solr 1.4 – Faster, Easier, and More Versatile than Ever
Apache Solr 1.4 – Faster, Easier, and More Versatile than Ever
 
Apache Solr for begginers
Apache Solr for begginersApache Solr for begginers
Apache Solr for begginers
 
Parallel SQL and Streaming Expressions in Apache Solr 6
Parallel SQL and Streaming Expressions in Apache Solr 6Parallel SQL and Streaming Expressions in Apache Solr 6
Parallel SQL and Streaming Expressions in Apache Solr 6
 
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
 

More from lucenerevolution

Text Classification Powered by Apache Mahout and Lucene
Text Classification Powered by Apache Mahout and LuceneText Classification Powered by Apache Mahout and Lucene
Text Classification Powered by Apache Mahout and Lucenelucenerevolution
 
State of the Art Logging. Kibana4Solr is Here!
State of the Art Logging. Kibana4Solr is Here! State of the Art Logging. Kibana4Solr is Here!
State of the Art Logging. Kibana4Solr is Here! lucenerevolution
 
Building Client-side Search Applications with Solr
Building Client-side Search Applications with SolrBuilding Client-side Search Applications with Solr
Building Client-side Search Applications with Solrlucenerevolution
 
Integrate Solr with real-time stream processing applications
Integrate Solr with real-time stream processing applicationsIntegrate Solr with real-time stream processing applications
Integrate Solr with real-time stream processing applicationslucenerevolution
 
Scaling Solr with SolrCloud
Scaling Solr with SolrCloudScaling Solr with SolrCloud
Scaling Solr with SolrCloudlucenerevolution
 
Administering and Monitoring SolrCloud Clusters
Administering and Monitoring SolrCloud ClustersAdministering and Monitoring SolrCloud Clusters
Administering and Monitoring SolrCloud Clusterslucenerevolution
 
Implementing a Custom Search Syntax using Solr, Lucene, and Parboiled
Implementing a Custom Search Syntax using Solr, Lucene, and ParboiledImplementing a Custom Search Syntax using Solr, Lucene, and Parboiled
Implementing a Custom Search Syntax using Solr, Lucene, and Parboiledlucenerevolution
 
Using Solr to Search and Analyze Logs
Using Solr to Search and Analyze Logs Using Solr to Search and Analyze Logs
Using Solr to Search and Analyze Logs lucenerevolution
 
Enhancing relevancy through personalization & semantic search
Enhancing relevancy through personalization & semantic searchEnhancing relevancy through personalization & semantic search
Enhancing relevancy through personalization & semantic searchlucenerevolution
 
Real-time Inverted Search in the Cloud Using Lucene and Storm
Real-time Inverted Search in the Cloud Using Lucene and StormReal-time Inverted Search in the Cloud Using Lucene and Storm
Real-time Inverted Search in the Cloud Using Lucene and Stormlucenerevolution
 
Solr's Admin UI - Where does the data come from?
Solr's Admin UI - Where does the data come from?Solr's Admin UI - Where does the data come from?
Solr's Admin UI - Where does the data come from?lucenerevolution
 
Text Classification with Lucene/Solr, Apache Hadoop and LibSVM
Text Classification with Lucene/Solr, Apache Hadoop and LibSVMText Classification with Lucene/Solr, Apache Hadoop and LibSVM
Text Classification with Lucene/Solr, Apache Hadoop and LibSVMlucenerevolution
 
Faceted Search with Lucene
Faceted Search with LuceneFaceted Search with Lucene
Faceted Search with Lucenelucenerevolution
 
Recent Additions to Lucene Arsenal
Recent Additions to Lucene ArsenalRecent Additions to Lucene Arsenal
Recent Additions to Lucene Arsenallucenerevolution
 
Turning search upside down
Turning search upside downTurning search upside down
Turning search upside downlucenerevolution
 
Spellchecking in Trovit: Implementing a Contextual Multi-language Spellchecke...
Spellchecking in Trovit: Implementing a Contextual Multi-language Spellchecke...Spellchecking in Trovit: Implementing a Contextual Multi-language Spellchecke...
Spellchecking in Trovit: Implementing a Contextual Multi-language Spellchecke...lucenerevolution
 
Shrinking the haystack wes caldwell - final
Shrinking the haystack   wes caldwell - finalShrinking the haystack   wes caldwell - final
Shrinking the haystack wes caldwell - finallucenerevolution
 
The First Class Integration of Solr with Hadoop
The First Class Integration of Solr with HadoopThe First Class Integration of Solr with Hadoop
The First Class Integration of Solr with Hadooplucenerevolution
 
A Novel methodology for handling Document Level Security in Search Based Appl...
A Novel methodology for handling Document Level Security in Search Based Appl...A Novel methodology for handling Document Level Security in Search Based Appl...
A Novel methodology for handling Document Level Security in Search Based Appl...lucenerevolution
 

More from lucenerevolution (20)

Text Classification Powered by Apache Mahout and Lucene
Text Classification Powered by Apache Mahout and LuceneText Classification Powered by Apache Mahout and Lucene
Text Classification Powered by Apache Mahout and Lucene
 
State of the Art Logging. Kibana4Solr is Here!
State of the Art Logging. Kibana4Solr is Here! State of the Art Logging. Kibana4Solr is Here!
State of the Art Logging. Kibana4Solr is Here!
 
Search at Twitter
Search at TwitterSearch at Twitter
Search at Twitter
 
Building Client-side Search Applications with Solr
Building Client-side Search Applications with SolrBuilding Client-side Search Applications with Solr
Building Client-side Search Applications with Solr
 
Integrate Solr with real-time stream processing applications
Integrate Solr with real-time stream processing applicationsIntegrate Solr with real-time stream processing applications
Integrate Solr with real-time stream processing applications
 
Scaling Solr with SolrCloud
Scaling Solr with SolrCloudScaling Solr with SolrCloud
Scaling Solr with SolrCloud
 
Administering and Monitoring SolrCloud Clusters
Administering and Monitoring SolrCloud ClustersAdministering and Monitoring SolrCloud Clusters
Administering and Monitoring SolrCloud Clusters
 
Implementing a Custom Search Syntax using Solr, Lucene, and Parboiled
Implementing a Custom Search Syntax using Solr, Lucene, and ParboiledImplementing a Custom Search Syntax using Solr, Lucene, and Parboiled
Implementing a Custom Search Syntax using Solr, Lucene, and Parboiled
 
Using Solr to Search and Analyze Logs
Using Solr to Search and Analyze Logs Using Solr to Search and Analyze Logs
Using Solr to Search and Analyze Logs
 
Enhancing relevancy through personalization & semantic search
Enhancing relevancy through personalization & semantic searchEnhancing relevancy through personalization & semantic search
Enhancing relevancy through personalization & semantic search
 
Real-time Inverted Search in the Cloud Using Lucene and Storm
Real-time Inverted Search in the Cloud Using Lucene and StormReal-time Inverted Search in the Cloud Using Lucene and Storm
Real-time Inverted Search in the Cloud Using Lucene and Storm
 
Solr's Admin UI - Where does the data come from?
Solr's Admin UI - Where does the data come from?Solr's Admin UI - Where does the data come from?
Solr's Admin UI - Where does the data come from?
 
Text Classification with Lucene/Solr, Apache Hadoop and LibSVM
Text Classification with Lucene/Solr, Apache Hadoop and LibSVMText Classification with Lucene/Solr, Apache Hadoop and LibSVM
Text Classification with Lucene/Solr, Apache Hadoop and LibSVM
 
Faceted Search with Lucene
Faceted Search with LuceneFaceted Search with Lucene
Faceted Search with Lucene
 
Recent Additions to Lucene Arsenal
Recent Additions to Lucene ArsenalRecent Additions to Lucene Arsenal
Recent Additions to Lucene Arsenal
 
Turning search upside down
Turning search upside downTurning search upside down
Turning search upside down
 
Spellchecking in Trovit: Implementing a Contextual Multi-language Spellchecke...
Spellchecking in Trovit: Implementing a Contextual Multi-language Spellchecke...Spellchecking in Trovit: Implementing a Contextual Multi-language Spellchecke...
Spellchecking in Trovit: Implementing a Contextual Multi-language Spellchecke...
 
Shrinking the haystack wes caldwell - final
Shrinking the haystack   wes caldwell - finalShrinking the haystack   wes caldwell - final
Shrinking the haystack wes caldwell - final
 
The First Class Integration of Solr with Hadoop
The First Class Integration of Solr with HadoopThe First Class Integration of Solr with Hadoop
The First Class Integration of Solr with Hadoop
 
A Novel methodology for handling Document Level Security in Search Based Appl...
A Novel methodology for handling Document Level Security in Search Based Appl...A Novel methodology for handling Document Level Security in Search Based Appl...
A Novel methodology for handling Document Level Security in Search Based Appl...
 

Recently uploaded

Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 

Recently uploaded (20)

DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 

Schemaless Solr and the Solr Schema REST API

  • 1.
  • 2. SCHEMALESS SOLR AND THE SOLR SCHEMA REST API Steve Rowe Twitter: @steven_a_rowe Senior Software Engineer, LucidWorks
  • 3. Who am I? •  •  •  •  LucidWorks employee Lucene/Solr committer since 2010 JFlex committer since 2008 Previously at the Center for Natural Language Processing at Syracuse University’s iSchool (School of Information) •  Twitter: @steven_a_rowe
  • 4. Schemaless Solr •  As of version 4.4, Solr can operate in schemaless mode: –  No need to pre-configure fields in the schema –  As documents are indexed, previously unknown fields are automatically added to the schema –  Field types are auto-detected from a limited set of basic types: •  Long, Double, Boolean, Date, Text (default) •  All are multi-valued –  Works in standalone Solr and SolrCloud •  Solr features used to implement schemaless mode: –  Managed schema •  Required for runtime schema modification –  Field value class guessing •  Parsers attempt to detect the Java class of Stringvalued field content –  Automatic schema field addition •  Java class(es) mapped to schema field type
  • 5. The slide about the nature and utility of schemalessness •  •  •  “Schemaless” does not mean that there is no schema Search applications need schemas to support non-trivial document models –  No schema needed when there is only one field, or only one field type, i.e. all fields share: •  Document & query processing, including analysis •  Index features & format •  Similarity implementation •  (etc.) –  Otherwise, search apps need to manage per-field processing configuration (i.e. a schema) to consistently index documents and effectively serve queries So what does “schemaless” mean for Solr? –  No up-front schema configuration required –  Schema discovery: document structure is either not fixed or not fully known
  • 6. Dynamic fields •  •  Convention over configuration Glob-like patterns match field names with field types ! <dynamicField name="*_i" type="int" indexed="true” stored="true"/>! <fieldType name="int" class="solr.TrieIntField"! precisionStep="0" positionIncrementGap="0"/>! ! •  •  •  •  Dynamic fields solve the problem of assigning field types to unknown fields by inferring a field’s type from its name By contrast, Solr’s schemaless mode infers an unknown field’s type from its value or values These two approaches are complementary The Solr schemaless example defines a number of dynamic fields, including the *_i ! int mapping above
  • 7. Schemaless mode example From example/example-schemaless/solr/collection1/conf/schema.xml: ! <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />! <field name="_version_" type="long" indexed="true" stored="true"/>! From example/exampledocs/books.csv: id,cat,name,price,inStock,author,series_t,sequence_i,genre_s! 0441385532,book,Jhereg,7.95,false,Steven Brust,Vlad Taltos,1,fantasy! ...! ! $ cd example && java -Dsolr.solr.home=example-schemaless/solr -jar start.jar! ! $ cd exampledocs && java -Dtype=text/csv -jar post.jar books.csv! ! SimplePostTool version 1.5! Posting files to base url http://localhost:8983/solr/update using content-type text/csv..! POSTing file books.csv! 1 files indexed.! COMMITting Solr index changes to http://localhost:8983/solr/update..! Time spent: 0:00:00.147!
  • 8. Schemaless mode example $ curl http://localhost:8983/solr/schema/fields! ! { "fields":[{ { { { "name":"_version_", "name":"author", "name":"cat", "name":"id", { "name":"inStock", { "name":"name", { "name":"price", ! id! cat! ! ! 0441385532! book! ! "type":"long", "indexed":true, "stored":true },! "type":"text_general" },! "type":"text_general" },! "type":"string", "multiValued":false, "indexed":true,! "required":true, "stored":true,! "uniqueKey":true },! "type":"booleans" },! "type":"text_general" },! "type":"tdoubles" }]}! name! price! inStock! author! series_t! sequence_i! genre_s! Jhereg! 7.95! false! Steven Brust! Vlad Taltos! 1! fantasy! ! From example/example-schemaless/solr/collection1/conf/schema.xml: ! <fieldType name="booleans" class="solr.BoolField" sortMissingLast="true" multiValued="true"/>! <fieldType name="tdoubles" class="solr.TrieDoubleField" precisionStep="8" ! positionIncrementGap="0" multiValued="true"/>! !
  • 9. Managed schema •  •  •  •  •  The schema resource is managed by Solr, rather than hand edited On first startup, Solr auto-converts schema.xml to managed-schema Managed schema format is currently XML, but may change in the future XML comments don’t survive the conversion. mutable=true enables runtime schema modification –  Automatic schema field addition –  Schema REST API From example/example-schemaless/solr/collection1/conf/solrconfig.xml: ! <schemaFactory class="ManagedIndexSchemaFactory">! <bool name="mutable">true</bool>! <str name="managedSchemaResourceName">managed-schema</str>! </schemaFactory>! conf/ before startup currency.xml! elevate.xml! lang/! protwords.txt! schema.xml! solrconfig.xml! stopwords.txt! synonyms.txt! conf/ after startup currency.xml! elevate.xml! lang/! managed-schema! protwords.txt! schema.xml.bak! solrconfig.xml! stopwords.txt! synonyms.txt!
  • 10. Field value class guessing •  •  Unknown fields’ String-typed values are speculatively parsed –  Cascading parsers attempt to recognize field values –  On failure, the next one is tried –  First successful parse wins Reconfigurable –  Integer parser could be swapped in for the Long parser, etc. –  Numeric parsers can take a locale for java.text.NumberFormat! –  Date parser, implemented using Joda-Time, can be configured with other patterns, a locale, and/or a default time zone <updateRequestProcessorChain name="add-unknown-fields-to-the-schema">! <processor class="solr.RemoveBlankFieldUpdateProcessorFactory"/>! <processor class="solr.ParseBooleanFieldUpdateProcessorFactory"/>! <processor class="solr.ParseLongFieldUpdateProcessorFactory"/>! <processor class="solr.ParseDoubleFieldUpdateProcessorFactory"/>! <processor class="solr.ParseDateFieldUpdateProcessorFactory">! <arr name="format">! <str>yyyy-MM-dd'T'HH:mm:ss.SSSZ</str>! <str>yyyy-MM-dd'T'HH:mm:ss,SSSZ</str>! <str>yyyy-MM-dd'T'HH:mm:ss.SSS</str>! <str>yyyy-MM-dd'T'HH:mm:ss,SSS</str>! <str>yyyy-MM-dd'T'HH:mm:ssZ</str>! <str>yyyy-MM-dd'T'HH:mm:ss</str>! <str>yyyy-MM-dd'T'HH:mmZ</str>! <str>yyyy-MM-dd'T'HH:mm</str>! <str>yyyy-MM-dd HH:mm:ss.SSSZ</str>! <str>yyyy-MM-dd HH:mm:ss,SSSZ</str>! <str>yyyy-MM-dd HH:mm:ss.SSS</str>! <str>yyyy-MM-dd HH:mm:ss,SSS</str>! <str>yyyy-MM-dd HH:mm:ssZ</str>! <str>yyyy-MM-dd HH:mm:ss</str>! <str>yyyy-MM-dd HH:mmZ</str>! <str>yyyy-MM-dd HH:mm</str>! <str>yyyy-MM-dd</str>! </arr>! </processor>! !
  • 11. Automatic schema field addition •  •  •  •  •  •  Field value classes are mapped to field types First match wins If none of the typeMapping-s match, the default field type is assigned If a multi-valued field contains a mix of value classes, the first mapping that matches all values’ classes wins The new field is added to the schema with the mapped field type Reconfigurable <processor class="solr.AddSchemaFieldsUpdateProcessorFactory">! <str name="defaultFieldType">text_general</str>! <lst name="typeMapping">! <str name="valueClass">java.lang.Boolean</str>! <str name="fieldType">booleans</str>! </lst>! <lst name="typeMapping">! <str name="valueClass">java.util.Date</str>! <str name="fieldType">tdates</str>! </lst>! <lst name="typeMapping">! <str name="valueClass">java.lang.Long</str>! <str name="valueClass">java.lang.Integer</str>! <str name="fieldType">tlongs</str>! </lst>! <lst name="typeMapping">! <str name="valueClass">java.lang.Number</str>! <str name="fieldType">tdoubles</str>! </lst>! </processor>!
  • 12. Schemaless mode limitations •  •  •  •  •  •  Automatically adding new schema fields in production may not be a good idea –  Unwanted fields, e.g. field name typos, won’t trigger an error First instance wins: field type detection can’t know about the full range of a field’s values Wasted space: e.g. Longs are always used, when Integers might suffice Limited gamut of detectable field types Single analysis specification for text fields Single processing model for all fields
  • 14. Schema REST API: read-only •  •  •  •  Each element of the schema is individually readable via the Schema REST API Output format can be JSON or XML (wt request param) Read-only elements: –  The entire schema •  In addition to JSON and XML output formats, output can also be in schema.xml format (?wt=schema.xml) –  All fields, or a specified set of them –  All dynamic fields, or a specified set of them –  All field types, or a specific one –  All copy field directives –  The schema name, version, uniqueKey, and default query operator –  The global similarity Managed schema is not required to use the read-only schema REST API.
  • 15. Schema REST API: read-only examples $ SOLR=http://localhost:8983/solr/collection1! ! $ curl $SOLR/schema/dynamicfields/*_i! ! ! $ curl $SOLR/schema/uniquekey?wt=xml! ! ! {! <?xml version="1.0" encoding="UTF-8"?>! <response>! <lst name="responseHeader">! <int name="status">0</int>! <int name="QTime">1</int>! </lst>! <str name="uniqueKey">id</str>! </response>! "responseHeader":{! "status":0,! "QTime":1},! "dynamicField":{! "name":"*_i",! "type":"int",! "indexed":true,! "stored":true}}! •  Schema REST API URLs employ the downcased form of all schema elements, but the responses use the same casing as schema.xml. •  For full details on the Solr Schema REST API, see the Schema API section of the Solr Reference Guide: https://cwiki.apache.org/confluence/display/solr/Schema+API
  • 16. Schema REST API: runtime schema modification •  •  •  •  •  To enable schema modification via the schema REST API, the schema must be managed, and must be configured as mutable. Schema modifications possible as of Solr 4.4: –  Fields may be added •  Copy field directives may optionally be added at the same time –  Copy field directives may be added Works under both standalone Solr and SolrCloud –  Under SolrCloud, conflicting simultaneous requests are detected using a form of optimistic concurrency and automatically retried Core/collection reload not required for schema modifications that are compatible with previously indexed documents –  Generally additions are not sources of schema incompatibility Schema incompatibility-inducing operations will require core/collection reload: –  Modifying or removing (dynamic) fields or copy field directives –  Modifying all other schema elements
  • 17. Schema REST API: add field example $ SOLR=http://localhost:8983/solr/collection1! ! $ curl $SOLR/schema/fields/claimid -X PUT -H 'Content-type: application/json' --data-binary '! { ! "type":"string",! "stored":true,! "copyFields": [ ! "claims", ! "all"! ]! }’! ! •  •  The copyField destinations “claims” and “all” must already exist in the schema. For full details on the Solr Schema REST API, see the Schema API section of the Solr Reference Guide: https://cwiki.apache.org/confluence/display/solr/Schema+API
  • 18. Schema REST API TODOs •  https://issues.apache.org/jira/browse/SOLR-4898 is the umbrella JIRA issue under which further schema REST API work will be done, including: –  adding dynamic fields –  adding field types –  enabling wholesale replacement by PUTing a new schema. –  modifying and removing fields, dynamic fields, field types, and copy field directives –  modifying all remaining aspects of the schema: Name, Version, Unique Key, Global Similarity, and Default Query Operator
  • 19. Proposal: Schema Annotations •  •  •  •  Add arbitrary metadata at the top level of the schema and at each leaf node Allow read/write access to that metadata via the REST API. Uses cases: –  Round-trippable documentation •  Conversion to managed schema format drops all comments –  Documentable tags –  When modifying the schema via REST API, a "last-modified" annotation could be automatically added. –  User-level arbitrary key/value metadata W3C XML Schema has a similar facility: http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/ structures.html#element-annotation
  • 20. Schema Annotation example <schema name="example" version="1.5">!  <annotation>!    <description element="tag" ! content="plain-numeric-field-types">!      Plain numeric field types store and index the! text value verbatim.!    </description>!    <documentation element="copyField">!      copyField commands copy one field to another at! the time a document is added to the index.  It's! used either to index the same field differently,!      or to add multiple fields to the same field for! easier/faster searching.!    </documentation>!    <last-modified>2014-03-08T12:14:02Z</last-modified>!    …!  </annotation>! …!  <fieldType name="pint" class="solr.IntField">!    <annotation>!      <tag>plain-numeric-field-types</tag>!    </annotation>!  </fieldType>!  <fieldType name="plong" class="solr.LongField">!    <annotation>!      <tag>plain-numeric-field-types</tag>!    </annotation>!  </fieldType>!  …!  <copyField source="cat" dest="text">!    <annotation>!      <todo>Copy to the catchall field?</todo>!    </annotation>!  </copyField>!  …!  <field name="text" type="text_general">!    <annotation>!      <description>catchall field</description>!      <visibility>public</visibility>!    </annotation>!  </field>!
  • 21. Summary •  Schemaless Solr mode enables quick prototyping with minimal setup •  •  Schema REST API provides programmatic read/write access to Solr’s schema More elements writeable soon •  Schema annotations would enable round-trippable documentation, tagging, and arbitrary user-provided metadata