SlideShare ist ein Scribd-Unternehmen logo
1 von 71
Downloaden Sie, um offline zu lesen
Solr Anti - patterns 
Rafał Kuć, Sematext Group, Inc. 
@kucrafal 
@sematext 
http://sematext.com
About me 
Sematext consultant & engineer 
Solr.pl co-founder 
Father & husband
The (not so) perfect migration 
h"p://en.wikipedia.org/wiki/Bird_migra4on 
h"p://www.likesbooks.com/aara:erhours/?p=750
From 3.1 to 4.10 (and hopefully not back) 
March 
2011 
September 
2014
The lonely solrconfig.xml 
<luceneMatchVersion>LUCENE_31</luceneMatchVersion> 
<directoryFactory 
name="DirectoryFactory" 
class="${solr.directoryFactory:solr.StandardDirectoryFactory}"/> 
<requestHandler 
name="/update" 
class="solr.XmlUpdateRequestHandler" 
/> 
<requestHandler 
name="/update/javabin" 
class="solr.BinaryUpdateRequestHandler" 
/> 
<requestHandler 
name="/update/csv" 
class="solr.CSVRequestHandler" 
/> 
<requestHandler 
name="/update/json" 
class="solr.JsonUpdateRequestHandler" 
/>
And faulty indexing 
DOC 
DOC 
DOC 
EXCEPTIONS 
:)
And faulty indexing 
109173 
[qtp1223685984-­‐20] 
ERROR 
org.apache.solr.core.SolrCore 
ľ 
org.apache.solr.common.SolrExcep4on: 
missing 
content 
stream 
at 
org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:69) 
at 
org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135) 
at 
org.apache.solr.core.SolrCore.execute(SolrCore.java:1967) 
at 
org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:777) 
at 
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:418) 
at 
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:207) 
at 
org.eclipse.je"y.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419) 
at 
org.eclipse.je"y.servlet.ServletHandler.doHandle(ServletHandler.java:455) 
at 
org.eclipse.je"y.server.handler.ScopedHandler.handle(ScopedHandler.java:137) 
at 
org.eclipse.je"y.security.SecurityHandler.handle(SecurityHandler.java:557) 
at 
org.eclipse.je"y.server.session.SessionHandler.doHandle(SessionHandler.java:231) 
at 
org.eclipse.je"y.server.handler.ContextHandler.doHandle(ContextHandler.java:1075) 
at 
org.eclipse.je"y.servlet.ServletHandler.doScope(ServletHandler.java:384) 
at 
org.eclipse.je"y.server.session.SessionHandler.doScope(SessionHandler.java:193) 
at 
org.eclipse.je"y.server.handler.ContextHandler.doScope(ContextHandler.java:1009) 
at 
org.eclipse.je"y.server.handler.ScopedHandler.handle(ScopedHandler.java:135) 
at 
org.eclipse.je"y.server.handler.ContextHandlerCollec4on.handle(ContextHandlerCollec4on.java:255) 
at 
org.eclipse.je"y.server.handler.HandlerCollec4on.handle(HandlerCollec4on.java:154) 
at 
org.eclipse.je"y.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 
at 
org.eclipse.je"y.server.Server.handle(Server.java:368) 
at 
org.eclipse.je"y.server.AbstractH"pConnec4on.handleRequest(AbstractH"pConnec4on.java:489) 
at 
org.eclipse.je"y.server.BlockingH"pConnec4on.handleRequest(BlockingH"pConnec4on.java:53) 
at 
org.eclipse.je"y.server.AbstractH"pConnec4on.headerComplete(AbstractH"pConnec4on.java:942) 
at 
org.eclipse.je"y.server.AbstractH"pConnec4on$RequestHandler.headerComplete(AbstractH"pConnec4on.java:1004) 
at 
org.eclipse.je"y.h"p.H"pParser.parseNext(H"pParser.java:647) 
at 
org.eclipse.je"y.h"p.H"pParser.parseAvailable(H"pParser.java:235) 
at 
org.eclipse.je"y.server.BlockingH"pConnec4on.handle(BlockingH"pConnec4on.java:72) 
at 
org.eclipse.je"y.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264) 
at 
org.eclipse.je"y.u4l.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) 
at 
org.eclipse.je"y.u4l.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) 
at 
java.lang.Thread.run(Unknown 
Source) 
<?xml 
version="1.0" 
encoding="UTF-­‐8"?> 
<response> 
<lst 
name="responseHeader"> 
<int 
name="status">400</int> 
<int 
name="QTime">0</int> 
</lst> 
<lst 
name="error"> 
<str 
name="msg">missing 
content 
stream</str> 
<int 
name="code">400</int> 
</lst> 
</response>
Let’s make that right 
<luceneMatchVersion>LUCENE_4.10.0</luceneMatchVersion> 
<directoryFactory 
name="DirectoryFactory" 
<nrtMode>true</nrtMode> 
class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/> 
<requestHandler 
name="/update" 
class="solr.UpdateRequestHandler" 
/> 
<requestHandler 
name="/update/json" 
class="solr.UpdateRequestHandler"> 
<lst 
name="defaults"> 
<str 
name="stream.contentType">applicaLon/json</str> 
</lst> 
</requestHandler> 
<updateLog> 
<str 
name="dir"> 
${solr.ulog.dir:} 
</str> 
</updateLog>
The old schema.xml 
<fieldType 
name="int" 
class="solr.IntField" 
omitNorms="true"/> 
<fieldType 
name="long" 
class="solr.LongField" 
omitNorms="true"/> 
<fieldType 
name="float" 
class="solr.FloatField" 
omitNorms="true"/> 
<fieldType 
name="double" 
class="solr.DoubleField" 
omitNorms="true"/> 
<fieldType 
name="date" 
class="solr.DateField" 
sortMissingLast="true" 
omitNorms="true"/> 
<fieldType 
name="sint" 
class="solr.SortableIntField" 
sortMissingLast="true" 
omitNorms="true"/> 
<fieldType 
name="slong" 
class="solr.SortableLongField" 
sortMissingLast="true" 
omitNorms="true"/> 
<fieldType 
name="sfloat" 
class="solr.SortableFloatField" 
sortMissingLast="true" 
omitNorms="true"/> 
<fieldType 
name="sdouble" 
class="solr.SortableDoubleField" 
sortMissingLast="true" 
omitNorms="true"/>
The old schema.xml 
<fieldType 
name="int" 
class="solr.IntField" 
omitNorms="true"/> 
<fieldType 
name="long" 
class="solr.LongField" 
omitNorms="true"/> 
<fieldType 
name="float" 
class="solr.FloatField" 
omitNorms="true"/> 
<fieldType 
name="double" 
class="solr.DoubleField" 
omitNorms="true"/> 
<fieldType 
name="date" 
class="solr.DateField" 
sortMissingLast="true" 
omitNorms="true"/> 
<fieldType 
name="sint" 
class="solr.SortableIntField" 
sortMissingLast="true" 
omitNorms="true"/> 
<fieldType 
name="slong" 
class="solr.SortableLongField" 
sortMissingLast="true" 
omitNorms="true"/> 
<fieldType 
name="sfloat" 
class="solr.SortableFloatField" 
sortMissingLast="true" 
omitNorms="true"/> 
<fieldType 
name="sdouble" 
class="solr.SortableDoubleField" 
sortMissingLast="true" 
omitNorms="true"/>
The new schema.xml 
<fieldType 
name="int" 
class="solr.TrieIntField" 
precisionStep="0" 
posi4onIncrementGap="0"/> 
<fieldType 
name="float" 
class="solr.TrieFloatField" 
precisionStep="0" 
posi4onIncrementGap="0"/> 
<fieldType 
name="long" 
class="solr.TrieLongField" 
precisionStep="0" 
posi4onIncrementGap="0"/> 
<fieldType 
name="double" 
class="solr.TrieDoubleField" 
precisionStep="0" 
posi4onIncrementGap="0"/> 
<fieldType 
name="date" 
class="solr.TrieDateField" 
precisionStep="0" 
posi4onIncrementGap="0"/> 
<fieldType 
name="4nt" 
class="solr.TrieIntField" 
precisionStep="8" 
posi4onIncrementGap="0"/> 
<fieldType 
name="rloat" 
class="solr.TrieFloatField" 
precisionStep="8" 
posi4onIncrementGap="0"/> 
<fieldType 
name="tlong" 
class="solr.TrieLongField" 
precisionStep="8" 
posi4onIncrementGap="0"/> 
<fieldType 
name="tdouble" 
class="solr.TrieDoubleField" 
precisionStep="8" 
posi4onIncrementGap="0"/> 
<fieldType 
name="tdate" 
class="solr.TrieDateField" 
precisionStep="6" 
posi4onIncrementGap="0"/>
Threads? What threads? 
<Set 
name="ThreadPool"> 
<New 
class="org.eclipse.je"y.u4l.thread.QueuedThreadPool"> 
<Set 
name="minThreads">10</Set> 
<Set 
name="maxThreads">200</Set> 
<Set 
name="detailedDump">false</Set> 
</New> 
</Set>
I see deadlocks
Threads? What threads? 
<Set 
name="ThreadPool"> 
<New 
class="org.eclipse.je"y.u4l.thread.QueuedThreadPool"> 
<Set 
name="minThreads">10</Set> 
<Set 
name="maxThreads">200</Set> 
<Set 
name="detailedDump">false</Set> 
</New> 
</Set>
OK, so now we can actually run queries 
<Set 
name="ThreadPool"> 
<New 
class="org.eclipse.je"y.u4l.thread.QueuedThreadPool"> 
<Set 
name="minThreads">10</Set> 
<Set 
name="maxThreads">10000</Set> 
<Set 
name="detailedDump">false</Set> 
</New> 
</Set>
The ZooKeeper
The ZooKeeper
The ZooKeeper
The ZooKeeper
The ZooKeeper
The ZooKeeper – production
The ZooKeeper – production 
-­‐DzkHost=zk1:2181,zk2:2181,zk3:2181
The ZooKeeper – production 
-­‐DzkHost=zk1:2181,zk2:2181,zk3:2181
The ZooKeeper – production 
-­‐DzkHost=zk1:2181,zk2:2181,zk3:2181
The ZooKeeper – production 
-­‐DzkHost=zk1:2181,zk2:2181,zk3:2181
Let’s cache everything 
<filterCache 
class="solr.LRUCache" 
size="1048576" 
ini4alSize="1048576" 
autowarmCount="524288"/> 
<queryResultCache 
class="solr.LRUCache" 
size="1048576" 
ini4alSize="1048576" 
<documentCache 
class="solr.LRUCache" 
autowarmCount="524288"/> 
size="1048576" 
ini4alSize="1048576" 
autowarmCount="0"/>
And now let’s look at the warmup times
And now let’s look at the warmup times
OK, show us the way „Mr. Consultant” 
<filterCache 
class="solr.FastLRUCache" 
size="1024" 
ini4alSize="1024" 
autowarmCount="512"/> 
<queryResultCache 
class="solr.LRUCache" 
size="16000" 
ini4alSize="16000" 
<documentCache 
class="solr.LRUCache" 
autowarmCount="8000"/> 
size="16384" 
ini4alSize="16384" 
autowarmCount="0"/>
Let’s look at the warmup times again
Let’s look at the warmup times again
Bulks are for noobs 
Applica4on 
Applica4on 
Applica4on 
Doc 
Doc 
Doc
Bulks are for noobs 
Applica4on 
Applica4on 
Applica4on 
Doc 
Doc 
Doc
But let’s use bulks, just in case
But let’s use bulks, just in case
We need to refresh and hard commit 
<autoCommit> 
<maxTime>1000</maxTime> 
<openSearcher>true</openSearcher> 
</autoCommit> 
<autoSo:Commit> 
<maxTime>1000</maxTime> 
</autoSo:Commit>
Maybe we should only refresh? 
<autoCommit> 
<maxTime>60000</maxTime> 
<openSearcher>false</openSearcher> 
</autoCommit> 
<autoSo:Commit> 
<maxTime>1000</maxTime> 
</autoSo:Commit>
OK, let’s go easy with refreshing 
<autoCommit> 
<maxTime>60000</maxTime> 
<openSearcher>false</openSearcher> 
</autoCommit> 
<autoSo:Commit> 
<maxTime>30000</maxTime> 
</autoSo:Commit>
But I really need all that data 
curl 
-­‐XGET 
'localhost:8983/solr/select?q=*:*&start=3000000&rows=5'
But I really need all that data 
curl 
-­‐XGET 
'localhost:8983/solr/select?q=*:*&start=3000000&rows=5' 
<?xml 
version="1.0" 
encoding="UTF-­‐8"?> 
<response> 
<lst 
name="responseHeader"> 
<int 
name="status">0</int> 
<int 
name="QTime">9418</int> 
<lst 
name="params"> 
<str 
name="start">3000000</str> 
<str 
name="q">*:*</str> 
<str 
name="rows">5</str> 
</lst> 
</lst> 
<result 
name="response" 
numFound="3284000" 
start="3000000"> 
. 
. 
. 
</result> 
</response>
But I really need all that data 
curl 
-­‐XGET 
'localhost:8983/solr/select?q=*:*&start=3000000&rows=5' 
<?xml 
version="1.0" 
encoding="UTF-­‐8"?> 
<response> 
<lst 
name="responseHeader"> 
<int 
name="status">0</int> 
<int 
name="QTime">9418</int> 
<lst 
name="params"> 
<?xml 
version="1.0" 
encoding="UTF-­‐8"?> 
<response> 
<lst 
name="error"> 
<str 
name="msg">java.lang.OutOfMemoryError: 
<str 
name="start">3000000</str> 
<str 
name="q">*:*</str> 
<str 
name="rows">Java 
5</heap 
str> 
space</str> 
</lst> 
</lst> 
<result 
name="response" 
numFound="3284000" 
start="3000000"> 
. 
. 
. 
</result> 
</response> 
<str 
name="trace">java.lang.RuntimeException: 
java.lang.OutOfMemoryError: 
Java 
heap 
space 
at 
org.apache.solr.servlet.SolrDispatchFilter.sendError(SolrDispatchFilter.java:796) 
at 
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:448) 
. 
. 
. 
Caused 
by: 
java.lang.OutOfMemoryError: 
Java 
heap 
space 
. 
. 
. 
</str> 
<int 
name="code">500</int> 
</lst> 
</response>
But I really need all that data 
Query
But I really need all that data
But I really need all that data
But I really need all that data 
Response
Use the scroll Luke 
curl 
-­‐XGET 
'localhost:8983/solr/select?q=*:*&cursorMark=*&sort=score+desc,id+desc'
Use the scroll Luke 
curl 
-­‐XGET 
'localhost:8983/solr/select?q=*:*&cursorMark=*&sort=score+desc,id+desc' 
<?xml 
version="1.0" 
encoding="UTF-­‐8"?> 
<response> 
<lst 
name="responseHeader"> 
<int 
name="status">0</int> 
<int 
name="QTime">189</int> 
<lst 
name="params"> 
<str 
name="sort">score 
desc,id 
desc</str> 
<str 
name="q">*:*</str> 
<str 
name="cursorMark">*</str> 
</lst> 
</lst> 
<result 
name="response" 
numFound="3284000" 
start="0"> 
<doc> 
... 
</doc> 
. 
. 
. 
</result> 
<str 
name="nextCursorMark">AoIIP4AAACY5OTk5OTA=</str> 
</response>
Use the scroll Luke 
curl 
-­‐XGET 
'localhost:8983/solr/select?q=*:*&sort=score+desc,id+desc 
&cursorMark=AoIIP4AAACY5OTk5OTA='
Use the scroll Luke 
curl 
-­‐XGET 
'localhost:8983/solr/select?q=*:*&sort=score+desc,id+desc 
&cursorMark=AoIIP4AAACY5OTk5OTA=' 
<?xml 
version="1.0" 
encoding="UTF-­‐8"?> 
<response> 
<lst 
name="responseHeader"> 
<int 
name="status">0</int> 
<int 
name="QTime">184</int> 
<lst 
name="params"> 
<str 
name="sort">score 
desc,id 
desc</str> 
<str 
name="q">*:*</str> 
<str 
name="cursorMark">AoIIP4AAACY5OTk5OTA=</str> 
</lst> 
</lst> 
<result 
name="response" 
numFound="3284000" 
start="0"> 
<doc> 
... 
</doc> 
. 
. 
. 
</result> 
<str 
name="nextCursorMark">AoIIP4AAACY5OTk5ODE=</str> 
</response>
Limiting faceting, why bother? 
curl 
-­‐XGET 
'localhost:8983/solr/select?q=*:*&facet=true&facet.field=tag&… 
facet.limit=-­‐1&facet.mincount=0'
Limiting faceting, why bother? 
curl 
-­‐XGET 
'localhost:8983/solr/select?q=*:*&facet=true&facet.field=tag&… 
facet.limit=-­‐1&facet.mincount=0' 
<?xml 
version="1.0" 
encoding="UTF-­‐8"?> 
<response> 
<lst 
name="responseHeader"> 
<int 
name="status">0</int> 
<int 
name="QTime">9967</int> 
<lst 
name="params"> 
... 
</lst> 
</lst> 
<result 
name="response" 
numFound="3284000" 
start="0"> 
. 
. 
. 
</result> 
<lst 
name="facet_counts"> 
<lst 
name="facet_fields"> 
<lst 
name="tag"> 
... 
</lst> 
</lst> 
</lst> 
</response>
Limiting faceting, why bother? 
curl 
-­‐XGET 
'localhost:8983/solr/select?q=*:*&facet=true&facet.field=tag&… 
facet.limit=-­‐1&facet.mincount=0' 
<?xml 
version="1.0" 
encoding="UTF-­‐8"?> 
<response> 
. 
. 
. 
<lst 
name="error"> 
<str 
name="msg">Error 
while 
processing 
facet 
fields: 
java.lang.OutOfMemoryError: 
Java 
heap 
space</str> 
<str 
name="trace">org.apache.solr.common.SolrException: 
Error 
while 
processing 
facet 
fields: 
java.lang.OutOfMemoryError: 
Java 
heap 
space 
. 
. 
. 
Caused 
by: 
java.lang.OutOfMemoryError: 
Java 
heap 
space 
at 
org.apache.solr.request.SimpleFacets.getFieldCacheCounts(SimpleFacets.java:685) 
. 
. 
. 
</str> 
<int 
name="code">500</int> 
</lst> 
</response>
Now let’s look at performance
Now let’s look at performance
Now let’s look at performance
Now let’s look at performance
Now let’s look at performance
Magic happens with small changes 
curl 
-­‐XGET 
'localhost:8983/solr/select?q=*:*&facet=true&facet.field=tag&… 
facet.limit=100&facet.mincount=1'
Magic happens with small changes
Magic happens with small changes
Magic happens with small changes
Magic happens with small changes
Magic happens with small changes
Magic happens with small changes
Magic happens with small changes
Monitoring in production 
h"p://sematext.com/spm/index.html
And remember… 
Release 
Notes 
Solr 
4.10.0 
<luceneMatchVersion> 
3.1 
</luceneMatchVersion>
Quick summary 
h"p://www.soothetube.com/2013/12/29/thats-­‐all-­‐folks/
We are hiring! 
Dig Search? 
Dig Analytics? 
Dig Big Data? 
Dig Performance? 
Dig Logging? 
Dig working with and in open – source? 
We’re hiring world – wide! 
http://sematext.com/about/jobs.html
Thank you! 
Rafał Kuć 
@kucrafal 
rafal.kuc@sematext.com 
Sematext 
@sematext 
http://sematext.com 
http://blog.sematext.com

Weitere ähnliche Inhalte

Was ist angesagt?

Eric Redmond – Distributed Search on Riak 2.0 - NoSQL matters Barcelona 2014
Eric Redmond – Distributed Search on Riak 2.0 - NoSQL matters Barcelona 2014Eric Redmond – Distributed Search on Riak 2.0 - NoSQL matters Barcelona 2014
Eric Redmond – Distributed Search on Riak 2.0 - NoSQL matters Barcelona 2014NoSQLmatters
 
Apache Solr Search Mastery
Apache Solr Search MasteryApache Solr Search Mastery
Apache Solr Search MasteryAcquia
 
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
 
Fazendo mágica com ElasticSearch
Fazendo mágica com ElasticSearchFazendo mágica com ElasticSearch
Fazendo mágica com ElasticSearchPedro Franceschi
 
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
 
ERRest - Designing a good REST service
ERRest - Designing a good REST serviceERRest - Designing a good REST service
ERRest - Designing a good REST serviceWO Community
 
New SPL Features in PHP 5.3
New SPL Features in PHP 5.3New SPL Features in PHP 5.3
New SPL Features in PHP 5.3Matthew Turland
 
Let's write secure Drupal code! DUG Belgium - 08/08/2019
Let's write secure Drupal code! DUG Belgium - 08/08/2019Let's write secure Drupal code! DUG Belgium - 08/08/2019
Let's write secure Drupal code! DUG Belgium - 08/08/2019Balázs Tatár
 
Electrify your code with PHP Generators
Electrify your code with PHP GeneratorsElectrify your code with PHP Generators
Electrify your code with PHP GeneratorsMark Baker
 
Solr and Lucene at Etsy - By Gregg Donovan
Solr and Lucene at Etsy - By Gregg DonovanSolr and Lucene at Etsy - By Gregg Donovan
Solr and Lucene at Etsy - By Gregg Donovanlucenerevolution
 
Drupal for ng_os
Drupal for ng_osDrupal for ng_os
Drupal for ng_osdstuartnz
 
PHP 7 – What changed internally? (PHP Barcelona 2015)
PHP 7 – What changed internally? (PHP Barcelona 2015)PHP 7 – What changed internally? (PHP Barcelona 2015)
PHP 7 – What changed internally? (PHP Barcelona 2015)Nikita Popov
 
Understanding Query Execution
Understanding Query ExecutionUnderstanding Query Execution
Understanding Query Executionwebhostingguy
 

Was ist angesagt? (20)

php part 2
php part 2php part 2
php part 2
 
Eric Redmond – Distributed Search on Riak 2.0 - NoSQL matters Barcelona 2014
Eric Redmond – Distributed Search on Riak 2.0 - NoSQL matters Barcelona 2014Eric Redmond – Distributed Search on Riak 2.0 - NoSQL matters Barcelona 2014
Eric Redmond – Distributed Search on Riak 2.0 - NoSQL matters Barcelona 2014
 
Apache Solr Search Mastery
Apache Solr Search MasteryApache Solr Search Mastery
Apache Solr Search Mastery
 
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
 
Fazendo mágica com ElasticSearch
Fazendo mágica com ElasticSearchFazendo mágica com ElasticSearch
Fazendo mágica com ElasticSearch
 
Quebec pdo
Quebec pdoQuebec pdo
Quebec pdo
 
Php 101: PDO
Php 101: PDOPhp 101: PDO
Php 101: PDO
 
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)
 
ERRest - Designing a good REST service
ERRest - Designing a good REST serviceERRest - Designing a good REST service
ERRest - Designing a good REST service
 
New SPL Features in PHP 5.3
New SPL Features in PHP 5.3New SPL Features in PHP 5.3
New SPL Features in PHP 5.3
 
Let's write secure Drupal code! DUG Belgium - 08/08/2019
Let's write secure Drupal code! DUG Belgium - 08/08/2019Let's write secure Drupal code! DUG Belgium - 08/08/2019
Let's write secure Drupal code! DUG Belgium - 08/08/2019
 
Electrify your code with PHP Generators
Electrify your code with PHP GeneratorsElectrify your code with PHP Generators
Electrify your code with PHP Generators
 
Solr and Lucene at Etsy - By Gregg Donovan
Solr and Lucene at Etsy - By Gregg DonovanSolr and Lucene at Etsy - By Gregg Donovan
Solr and Lucene at Etsy - By Gregg Donovan
 
Solr & Lucene at Etsy
Solr & Lucene at EtsySolr & Lucene at Etsy
Solr & Lucene at Etsy
 
Drupal for ng_os
Drupal for ng_osDrupal for ng_os
Drupal for ng_os
 
ERRest in Depth
ERRest in DepthERRest in Depth
ERRest in Depth
 
Advanced Querying with CakePHP 3
Advanced Querying with CakePHP 3Advanced Querying with CakePHP 3
Advanced Querying with CakePHP 3
 
PHP 7 – What changed internally? (PHP Barcelona 2015)
PHP 7 – What changed internally? (PHP Barcelona 2015)PHP 7 – What changed internally? (PHP Barcelona 2015)
PHP 7 – What changed internally? (PHP Barcelona 2015)
 
My shell
My shellMy shell
My shell
 
Understanding Query Execution
Understanding Query ExecutionUnderstanding Query Execution
Understanding Query Execution
 

Ähnlich wie Solr Anti-Patterns: Presented by Rafał Kuć, Sematext

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
 
Solr vs. Elasticsearch - Case by Case
Solr vs. Elasticsearch - Case by CaseSolr vs. Elasticsearch - Case by Case
Solr vs. Elasticsearch - Case by CaseAlexandre Rafalovitch
 
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
 
Accumulo Summit 2015: Zookeeper, Accumulo, and You [Internals]
Accumulo Summit 2015: Zookeeper, Accumulo, and You [Internals]Accumulo Summit 2015: Zookeeper, Accumulo, and You [Internals]
Accumulo Summit 2015: Zookeeper, Accumulo, and You [Internals]Accumulo Summit
 
Rich Portlet Development in uPortal
Rich Portlet Development in uPortalRich Portlet Development in uPortal
Rich Portlet Development in uPortalJennifer Bourey
 
Using Apache Solr
Using Apache SolrUsing Apache Solr
Using Apache Solrpittaya
 
Java Web Programming [5/9] : EL, JSTL and Custom Tags
Java Web Programming [5/9] : EL, JSTL and Custom TagsJava Web Programming [5/9] : EL, JSTL and Custom Tags
Java Web Programming [5/9] : EL, JSTL and Custom TagsIMC Institute
 
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguajeKotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguajeVíctor Leonel Orozco López
 
Spring into rails
Spring into railsSpring into rails
Spring into railsHiro Asari
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with SolrErik Hatcher
 
Propel sfugmd
Propel sfugmdPropel sfugmd
Propel sfugmdiKlaus
 
Всеволод Струкчинский: Node.js
Всеволод Струкчинский: Node.jsВсеволод Струкчинский: Node.js
Всеволод Струкчинский: Node.jsYandex
 
Scaling Solr with SolrCloud
Scaling Solr with SolrCloudScaling Solr with SolrCloud
Scaling Solr with SolrCloudlucenerevolution
 
A noobs lesson on solr (configuration)
A noobs lesson on solr (configuration)A noobs lesson on solr (configuration)
A noobs lesson on solr (configuration)BTI360
 
Cassandra summit
Cassandra summitCassandra summit
Cassandra summitmattstump
 

Ähnlich wie Solr Anti-Patterns: Presented by Rafał Kuć, Sematext (20)

Solr Anti Patterns
Solr Anti PatternsSolr Anti Patterns
Solr Anti Patterns
 
Apache solr liferay
Apache solr liferayApache solr liferay
Apache solr liferay
 
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
 
Solr vs. Elasticsearch - Case by Case
Solr vs. Elasticsearch - Case by CaseSolr vs. Elasticsearch - Case by Case
Solr vs. Elasticsearch - Case by Case
 
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
 
Accumulo Summit 2015: Zookeeper, Accumulo, and You [Internals]
Accumulo Summit 2015: Zookeeper, Accumulo, and You [Internals]Accumulo Summit 2015: Zookeeper, Accumulo, and You [Internals]
Accumulo Summit 2015: Zookeeper, Accumulo, and You [Internals]
 
Rich Portlet Development in uPortal
Rich Portlet Development in uPortalRich Portlet Development in uPortal
Rich Portlet Development in uPortal
 
Using Apache Solr
Using Apache SolrUsing Apache Solr
Using Apache Solr
 
Java Web Programming [5/9] : EL, JSTL and Custom Tags
Java Web Programming [5/9] : EL, JSTL and Custom TagsJava Web Programming [5/9] : EL, JSTL and Custom Tags
Java Web Programming [5/9] : EL, JSTL and Custom Tags
 
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguajeKotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
 
Spring into rails
Spring into railsSpring into rails
Spring into rails
 
Scaling Solr with Solr Cloud
Scaling Solr with Solr CloudScaling Solr with Solr Cloud
Scaling Solr with Solr Cloud
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with Solr
 
Propel sfugmd
Propel sfugmdPropel sfugmd
Propel sfugmd
 
Всеволод Струкчинский: Node.js
Всеволод Струкчинский: Node.jsВсеволод Струкчинский: Node.js
Всеволод Струкчинский: Node.js
 
Scaling Solr with SolrCloud
Scaling Solr with SolrCloudScaling Solr with SolrCloud
Scaling Solr with SolrCloud
 
Play vs Rails
Play vs RailsPlay vs Rails
Play vs Rails
 
A noobs lesson on solr (configuration)
A noobs lesson on solr (configuration)A noobs lesson on solr (configuration)
A noobs lesson on solr (configuration)
 
Cassandra summit
Cassandra summitCassandra summit
Cassandra summit
 
Solr02 fields
Solr02 fieldsSolr02 fields
Solr02 fields
 

Mehr von Lucidworks

Search is the Tip of the Spear for Your B2B eCommerce Strategy
Search is the Tip of the Spear for Your B2B eCommerce StrategySearch is the Tip of the Spear for Your B2B eCommerce Strategy
Search is the Tip of the Spear for Your B2B eCommerce StrategyLucidworks
 
Drive Agent Effectiveness in Salesforce
Drive Agent Effectiveness in SalesforceDrive Agent Effectiveness in Salesforce
Drive Agent Effectiveness in SalesforceLucidworks
 
How Crate & Barrel Connects Shoppers with Relevant Products
How Crate & Barrel Connects Shoppers with Relevant ProductsHow Crate & Barrel Connects Shoppers with Relevant Products
How Crate & Barrel Connects Shoppers with Relevant ProductsLucidworks
 
Lucidworks & IMRG Webinar – Best-In-Class Retail Product Discovery
Lucidworks & IMRG Webinar – Best-In-Class Retail Product DiscoveryLucidworks & IMRG Webinar – Best-In-Class Retail Product Discovery
Lucidworks & IMRG Webinar – Best-In-Class Retail Product DiscoveryLucidworks
 
Connected Experiences Are Personalized Experiences
Connected Experiences Are Personalized ExperiencesConnected Experiences Are Personalized Experiences
Connected Experiences Are Personalized ExperiencesLucidworks
 
Intelligent Insight Driven Policing with MC+A, Toronto Police Service and Luc...
Intelligent Insight Driven Policing with MC+A, Toronto Police Service and Luc...Intelligent Insight Driven Policing with MC+A, Toronto Police Service and Luc...
Intelligent Insight Driven Policing with MC+A, Toronto Police Service and Luc...Lucidworks
 
[Webinar] Intelligent Policing. Leveraging Data to more effectively Serve Com...
[Webinar] Intelligent Policing. Leveraging Data to more effectively Serve Com...[Webinar] Intelligent Policing. Leveraging Data to more effectively Serve Com...
[Webinar] Intelligent Policing. Leveraging Data to more effectively Serve Com...Lucidworks
 
Preparing for Peak in Ecommerce | eTail Asia 2020
Preparing for Peak in Ecommerce | eTail Asia 2020Preparing for Peak in Ecommerce | eTail Asia 2020
Preparing for Peak in Ecommerce | eTail Asia 2020Lucidworks
 
Accelerate The Path To Purchase With Product Discovery at Retail Innovation C...
Accelerate The Path To Purchase With Product Discovery at Retail Innovation C...Accelerate The Path To Purchase With Product Discovery at Retail Innovation C...
Accelerate The Path To Purchase With Product Discovery at Retail Innovation C...Lucidworks
 
AI-Powered Linguistics and Search with Fusion and Rosette
AI-Powered Linguistics and Search with Fusion and RosetteAI-Powered Linguistics and Search with Fusion and Rosette
AI-Powered Linguistics and Search with Fusion and RosetteLucidworks
 
The Service Industry After COVID-19: The Soul of Service in a Virtual Moment
The Service Industry After COVID-19: The Soul of Service in a Virtual MomentThe Service Industry After COVID-19: The Soul of Service in a Virtual Moment
The Service Industry After COVID-19: The Soul of Service in a Virtual MomentLucidworks
 
Webinar: Smart answers for employee and customer support after covid 19 - Europe
Webinar: Smart answers for employee and customer support after covid 19 - EuropeWebinar: Smart answers for employee and customer support after covid 19 - Europe
Webinar: Smart answers for employee and customer support after covid 19 - EuropeLucidworks
 
Smart Answers for Employee and Customer Support After COVID-19
Smart Answers for Employee and Customer Support After COVID-19Smart Answers for Employee and Customer Support After COVID-19
Smart Answers for Employee and Customer Support After COVID-19Lucidworks
 
Applying AI & Search in Europe - featuring 451 Research
Applying AI & Search in Europe - featuring 451 ResearchApplying AI & Search in Europe - featuring 451 Research
Applying AI & Search in Europe - featuring 451 ResearchLucidworks
 
Webinar: Accelerate Data Science with Fusion 5.1
Webinar: Accelerate Data Science with Fusion 5.1Webinar: Accelerate Data Science with Fusion 5.1
Webinar: Accelerate Data Science with Fusion 5.1Lucidworks
 
Webinar: 5 Must-Have Items You Need for Your 2020 Ecommerce Strategy
Webinar: 5 Must-Have Items You Need for Your 2020 Ecommerce StrategyWebinar: 5 Must-Have Items You Need for Your 2020 Ecommerce Strategy
Webinar: 5 Must-Have Items You Need for Your 2020 Ecommerce StrategyLucidworks
 
Where Search Meets Science and Style Meets Savings: Nordstrom Rack's Journey ...
Where Search Meets Science and Style Meets Savings: Nordstrom Rack's Journey ...Where Search Meets Science and Style Meets Savings: Nordstrom Rack's Journey ...
Where Search Meets Science and Style Meets Savings: Nordstrom Rack's Journey ...Lucidworks
 
Apply Knowledge Graphs and Search for Real-World Decision Intelligence
Apply Knowledge Graphs and Search for Real-World Decision IntelligenceApply Knowledge Graphs and Search for Real-World Decision Intelligence
Apply Knowledge Graphs and Search for Real-World Decision IntelligenceLucidworks
 
Webinar: Building a Business Case for Enterprise Search
Webinar: Building a Business Case for Enterprise SearchWebinar: Building a Business Case for Enterprise Search
Webinar: Building a Business Case for Enterprise SearchLucidworks
 
Why Insight Engines Matter in 2020 and Beyond
Why Insight Engines Matter in 2020 and BeyondWhy Insight Engines Matter in 2020 and Beyond
Why Insight Engines Matter in 2020 and BeyondLucidworks
 

Mehr von Lucidworks (20)

Search is the Tip of the Spear for Your B2B eCommerce Strategy
Search is the Tip of the Spear for Your B2B eCommerce StrategySearch is the Tip of the Spear for Your B2B eCommerce Strategy
Search is the Tip of the Spear for Your B2B eCommerce Strategy
 
Drive Agent Effectiveness in Salesforce
Drive Agent Effectiveness in SalesforceDrive Agent Effectiveness in Salesforce
Drive Agent Effectiveness in Salesforce
 
How Crate & Barrel Connects Shoppers with Relevant Products
How Crate & Barrel Connects Shoppers with Relevant ProductsHow Crate & Barrel Connects Shoppers with Relevant Products
How Crate & Barrel Connects Shoppers with Relevant Products
 
Lucidworks & IMRG Webinar – Best-In-Class Retail Product Discovery
Lucidworks & IMRG Webinar – Best-In-Class Retail Product DiscoveryLucidworks & IMRG Webinar – Best-In-Class Retail Product Discovery
Lucidworks & IMRG Webinar – Best-In-Class Retail Product Discovery
 
Connected Experiences Are Personalized Experiences
Connected Experiences Are Personalized ExperiencesConnected Experiences Are Personalized Experiences
Connected Experiences Are Personalized Experiences
 
Intelligent Insight Driven Policing with MC+A, Toronto Police Service and Luc...
Intelligent Insight Driven Policing with MC+A, Toronto Police Service and Luc...Intelligent Insight Driven Policing with MC+A, Toronto Police Service and Luc...
Intelligent Insight Driven Policing with MC+A, Toronto Police Service and Luc...
 
[Webinar] Intelligent Policing. Leveraging Data to more effectively Serve Com...
[Webinar] Intelligent Policing. Leveraging Data to more effectively Serve Com...[Webinar] Intelligent Policing. Leveraging Data to more effectively Serve Com...
[Webinar] Intelligent Policing. Leveraging Data to more effectively Serve Com...
 
Preparing for Peak in Ecommerce | eTail Asia 2020
Preparing for Peak in Ecommerce | eTail Asia 2020Preparing for Peak in Ecommerce | eTail Asia 2020
Preparing for Peak in Ecommerce | eTail Asia 2020
 
Accelerate The Path To Purchase With Product Discovery at Retail Innovation C...
Accelerate The Path To Purchase With Product Discovery at Retail Innovation C...Accelerate The Path To Purchase With Product Discovery at Retail Innovation C...
Accelerate The Path To Purchase With Product Discovery at Retail Innovation C...
 
AI-Powered Linguistics and Search with Fusion and Rosette
AI-Powered Linguistics and Search with Fusion and RosetteAI-Powered Linguistics and Search with Fusion and Rosette
AI-Powered Linguistics and Search with Fusion and Rosette
 
The Service Industry After COVID-19: The Soul of Service in a Virtual Moment
The Service Industry After COVID-19: The Soul of Service in a Virtual MomentThe Service Industry After COVID-19: The Soul of Service in a Virtual Moment
The Service Industry After COVID-19: The Soul of Service in a Virtual Moment
 
Webinar: Smart answers for employee and customer support after covid 19 - Europe
Webinar: Smart answers for employee and customer support after covid 19 - EuropeWebinar: Smart answers for employee and customer support after covid 19 - Europe
Webinar: Smart answers for employee and customer support after covid 19 - Europe
 
Smart Answers for Employee and Customer Support After COVID-19
Smart Answers for Employee and Customer Support After COVID-19Smart Answers for Employee and Customer Support After COVID-19
Smart Answers for Employee and Customer Support After COVID-19
 
Applying AI & Search in Europe - featuring 451 Research
Applying AI & Search in Europe - featuring 451 ResearchApplying AI & Search in Europe - featuring 451 Research
Applying AI & Search in Europe - featuring 451 Research
 
Webinar: Accelerate Data Science with Fusion 5.1
Webinar: Accelerate Data Science with Fusion 5.1Webinar: Accelerate Data Science with Fusion 5.1
Webinar: Accelerate Data Science with Fusion 5.1
 
Webinar: 5 Must-Have Items You Need for Your 2020 Ecommerce Strategy
Webinar: 5 Must-Have Items You Need for Your 2020 Ecommerce StrategyWebinar: 5 Must-Have Items You Need for Your 2020 Ecommerce Strategy
Webinar: 5 Must-Have Items You Need for Your 2020 Ecommerce Strategy
 
Where Search Meets Science and Style Meets Savings: Nordstrom Rack's Journey ...
Where Search Meets Science and Style Meets Savings: Nordstrom Rack's Journey ...Where Search Meets Science and Style Meets Savings: Nordstrom Rack's Journey ...
Where Search Meets Science and Style Meets Savings: Nordstrom Rack's Journey ...
 
Apply Knowledge Graphs and Search for Real-World Decision Intelligence
Apply Knowledge Graphs and Search for Real-World Decision IntelligenceApply Knowledge Graphs and Search for Real-World Decision Intelligence
Apply Knowledge Graphs and Search for Real-World Decision Intelligence
 
Webinar: Building a Business Case for Enterprise Search
Webinar: Building a Business Case for Enterprise SearchWebinar: Building a Business Case for Enterprise Search
Webinar: Building a Business Case for Enterprise Search
 
Why Insight Engines Matter in 2020 and Beyond
Why Insight Engines Matter in 2020 and BeyondWhy Insight Engines Matter in 2020 and Beyond
Why Insight Engines Matter in 2020 and Beyond
 

Kürzlich hochgeladen

How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 

Kürzlich hochgeladen (20)

How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 

Solr Anti-Patterns: Presented by Rafał Kuć, Sematext

  • 1.
  • 2. Solr Anti - patterns Rafał Kuć, Sematext Group, Inc. @kucrafal @sematext http://sematext.com
  • 3. About me Sematext consultant & engineer Solr.pl co-founder Father & husband
  • 4. The (not so) perfect migration h"p://en.wikipedia.org/wiki/Bird_migra4on h"p://www.likesbooks.com/aara:erhours/?p=750
  • 5. From 3.1 to 4.10 (and hopefully not back) March 2011 September 2014
  • 6. The lonely solrconfig.xml <luceneMatchVersion>LUCENE_31</luceneMatchVersion> <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.StandardDirectoryFactory}"/> <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" /> <requestHandler name="/update/javabin" class="solr.BinaryUpdateRequestHandler" /> <requestHandler name="/update/csv" class="solr.CSVRequestHandler" /> <requestHandler name="/update/json" class="solr.JsonUpdateRequestHandler" />
  • 7. And faulty indexing DOC DOC DOC EXCEPTIONS :)
  • 8. And faulty indexing 109173 [qtp1223685984-­‐20] ERROR org.apache.solr.core.SolrCore ľ org.apache.solr.common.SolrExcep4on: missing content stream at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:69) at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135) at org.apache.solr.core.SolrCore.execute(SolrCore.java:1967) at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:777) at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:418) at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:207) at org.eclipse.je"y.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419) at org.eclipse.je"y.servlet.ServletHandler.doHandle(ServletHandler.java:455) at org.eclipse.je"y.server.handler.ScopedHandler.handle(ScopedHandler.java:137) at org.eclipse.je"y.security.SecurityHandler.handle(SecurityHandler.java:557) at org.eclipse.je"y.server.session.SessionHandler.doHandle(SessionHandler.java:231) at org.eclipse.je"y.server.handler.ContextHandler.doHandle(ContextHandler.java:1075) at org.eclipse.je"y.servlet.ServletHandler.doScope(ServletHandler.java:384) at org.eclipse.je"y.server.session.SessionHandler.doScope(SessionHandler.java:193) at org.eclipse.je"y.server.handler.ContextHandler.doScope(ContextHandler.java:1009) at org.eclipse.je"y.server.handler.ScopedHandler.handle(ScopedHandler.java:135) at org.eclipse.je"y.server.handler.ContextHandlerCollec4on.handle(ContextHandlerCollec4on.java:255) at org.eclipse.je"y.server.handler.HandlerCollec4on.handle(HandlerCollec4on.java:154) at org.eclipse.je"y.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) at org.eclipse.je"y.server.Server.handle(Server.java:368) at org.eclipse.je"y.server.AbstractH"pConnec4on.handleRequest(AbstractH"pConnec4on.java:489) at org.eclipse.je"y.server.BlockingH"pConnec4on.handleRequest(BlockingH"pConnec4on.java:53) at org.eclipse.je"y.server.AbstractH"pConnec4on.headerComplete(AbstractH"pConnec4on.java:942) at org.eclipse.je"y.server.AbstractH"pConnec4on$RequestHandler.headerComplete(AbstractH"pConnec4on.java:1004) at org.eclipse.je"y.h"p.H"pParser.parseNext(H"pParser.java:647) at org.eclipse.je"y.h"p.H"pParser.parseAvailable(H"pParser.java:235) at org.eclipse.je"y.server.BlockingH"pConnec4on.handle(BlockingH"pConnec4on.java:72) at org.eclipse.je"y.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264) at org.eclipse.je"y.u4l.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) at org.eclipse.je"y.u4l.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) at java.lang.Thread.run(Unknown Source) <?xml version="1.0" encoding="UTF-­‐8"?> <response> <lst name="responseHeader"> <int name="status">400</int> <int name="QTime">0</int> </lst> <lst name="error"> <str name="msg">missing content stream</str> <int name="code">400</int> </lst> </response>
  • 9. Let’s make that right <luceneMatchVersion>LUCENE_4.10.0</luceneMatchVersion> <directoryFactory name="DirectoryFactory" <nrtMode>true</nrtMode> class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/> <requestHandler name="/update" class="solr.UpdateRequestHandler" /> <requestHandler name="/update/json" class="solr.UpdateRequestHandler"> <lst name="defaults"> <str name="stream.contentType">applicaLon/json</str> </lst> </requestHandler> <updateLog> <str name="dir"> ${solr.ulog.dir:} </str> </updateLog>
  • 10. The old schema.xml <fieldType name="int" class="solr.IntField" omitNorms="true"/> <fieldType name="long" class="solr.LongField" omitNorms="true"/> <fieldType name="float" class="solr.FloatField" omitNorms="true"/> <fieldType name="double" class="solr.DoubleField" omitNorms="true"/> <fieldType name="date" class="solr.DateField" sortMissingLast="true" omitNorms="true"/> <fieldType name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/> <fieldType name="slong" class="solr.SortableLongField" sortMissingLast="true" omitNorms="true"/> <fieldType name="sfloat" class="solr.SortableFloatField" sortMissingLast="true" omitNorms="true"/> <fieldType name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true" omitNorms="true"/>
  • 11. The old schema.xml <fieldType name="int" class="solr.IntField" omitNorms="true"/> <fieldType name="long" class="solr.LongField" omitNorms="true"/> <fieldType name="float" class="solr.FloatField" omitNorms="true"/> <fieldType name="double" class="solr.DoubleField" omitNorms="true"/> <fieldType name="date" class="solr.DateField" sortMissingLast="true" omitNorms="true"/> <fieldType name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/> <fieldType name="slong" class="solr.SortableLongField" sortMissingLast="true" omitNorms="true"/> <fieldType name="sfloat" class="solr.SortableFloatField" sortMissingLast="true" omitNorms="true"/> <fieldType name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true" omitNorms="true"/>
  • 12. The new schema.xml <fieldType name="int" class="solr.TrieIntField" precisionStep="0" posi4onIncrementGap="0"/> <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" posi4onIncrementGap="0"/> <fieldType name="long" class="solr.TrieLongField" precisionStep="0" posi4onIncrementGap="0"/> <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" posi4onIncrementGap="0"/> <fieldType name="date" class="solr.TrieDateField" precisionStep="0" posi4onIncrementGap="0"/> <fieldType name="4nt" class="solr.TrieIntField" precisionStep="8" posi4onIncrementGap="0"/> <fieldType name="rloat" class="solr.TrieFloatField" precisionStep="8" posi4onIncrementGap="0"/> <fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" posi4onIncrementGap="0"/> <fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" posi4onIncrementGap="0"/> <fieldType name="tdate" class="solr.TrieDateField" precisionStep="6" posi4onIncrementGap="0"/>
  • 13. Threads? What threads? <Set name="ThreadPool"> <New class="org.eclipse.je"y.u4l.thread.QueuedThreadPool"> <Set name="minThreads">10</Set> <Set name="maxThreads">200</Set> <Set name="detailedDump">false</Set> </New> </Set>
  • 15. Threads? What threads? <Set name="ThreadPool"> <New class="org.eclipse.je"y.u4l.thread.QueuedThreadPool"> <Set name="minThreads">10</Set> <Set name="maxThreads">200</Set> <Set name="detailedDump">false</Set> </New> </Set>
  • 16. OK, so now we can actually run queries <Set name="ThreadPool"> <New class="org.eclipse.je"y.u4l.thread.QueuedThreadPool"> <Set name="minThreads">10</Set> <Set name="maxThreads">10000</Set> <Set name="detailedDump">false</Set> </New> </Set>
  • 22. The ZooKeeper – production
  • 23. The ZooKeeper – production -­‐DzkHost=zk1:2181,zk2:2181,zk3:2181
  • 24. The ZooKeeper – production -­‐DzkHost=zk1:2181,zk2:2181,zk3:2181
  • 25. The ZooKeeper – production -­‐DzkHost=zk1:2181,zk2:2181,zk3:2181
  • 26. The ZooKeeper – production -­‐DzkHost=zk1:2181,zk2:2181,zk3:2181
  • 27. Let’s cache everything <filterCache class="solr.LRUCache" size="1048576" ini4alSize="1048576" autowarmCount="524288"/> <queryResultCache class="solr.LRUCache" size="1048576" ini4alSize="1048576" <documentCache class="solr.LRUCache" autowarmCount="524288"/> size="1048576" ini4alSize="1048576" autowarmCount="0"/>
  • 28. And now let’s look at the warmup times
  • 29. And now let’s look at the warmup times
  • 30. OK, show us the way „Mr. Consultant” <filterCache class="solr.FastLRUCache" size="1024" ini4alSize="1024" autowarmCount="512"/> <queryResultCache class="solr.LRUCache" size="16000" ini4alSize="16000" <documentCache class="solr.LRUCache" autowarmCount="8000"/> size="16384" ini4alSize="16384" autowarmCount="0"/>
  • 31. Let’s look at the warmup times again
  • 32. Let’s look at the warmup times again
  • 33. Bulks are for noobs Applica4on Applica4on Applica4on Doc Doc Doc
  • 34. Bulks are for noobs Applica4on Applica4on Applica4on Doc Doc Doc
  • 35. But let’s use bulks, just in case
  • 36. But let’s use bulks, just in case
  • 37. We need to refresh and hard commit <autoCommit> <maxTime>1000</maxTime> <openSearcher>true</openSearcher> </autoCommit> <autoSo:Commit> <maxTime>1000</maxTime> </autoSo:Commit>
  • 38. Maybe we should only refresh? <autoCommit> <maxTime>60000</maxTime> <openSearcher>false</openSearcher> </autoCommit> <autoSo:Commit> <maxTime>1000</maxTime> </autoSo:Commit>
  • 39. OK, let’s go easy with refreshing <autoCommit> <maxTime>60000</maxTime> <openSearcher>false</openSearcher> </autoCommit> <autoSo:Commit> <maxTime>30000</maxTime> </autoSo:Commit>
  • 40. But I really need all that data curl -­‐XGET 'localhost:8983/solr/select?q=*:*&start=3000000&rows=5'
  • 41. But I really need all that data curl -­‐XGET 'localhost:8983/solr/select?q=*:*&start=3000000&rows=5' <?xml version="1.0" encoding="UTF-­‐8"?> <response> <lst name="responseHeader"> <int name="status">0</int> <int name="QTime">9418</int> <lst name="params"> <str name="start">3000000</str> <str name="q">*:*</str> <str name="rows">5</str> </lst> </lst> <result name="response" numFound="3284000" start="3000000"> . . . </result> </response>
  • 42. But I really need all that data curl -­‐XGET 'localhost:8983/solr/select?q=*:*&start=3000000&rows=5' <?xml version="1.0" encoding="UTF-­‐8"?> <response> <lst name="responseHeader"> <int name="status">0</int> <int name="QTime">9418</int> <lst name="params"> <?xml version="1.0" encoding="UTF-­‐8"?> <response> <lst name="error"> <str name="msg">java.lang.OutOfMemoryError: <str name="start">3000000</str> <str name="q">*:*</str> <str name="rows">Java 5</heap str> space</str> </lst> </lst> <result name="response" numFound="3284000" start="3000000"> . . . </result> </response> <str name="trace">java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space at org.apache.solr.servlet.SolrDispatchFilter.sendError(SolrDispatchFilter.java:796) at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:448) . . . Caused by: java.lang.OutOfMemoryError: Java heap space . . . </str> <int name="code">500</int> </lst> </response>
  • 43. But I really need all that data Query
  • 44. But I really need all that data
  • 45. But I really need all that data
  • 46. But I really need all that data Response
  • 47. Use the scroll Luke curl -­‐XGET 'localhost:8983/solr/select?q=*:*&cursorMark=*&sort=score+desc,id+desc'
  • 48. Use the scroll Luke curl -­‐XGET 'localhost:8983/solr/select?q=*:*&cursorMark=*&sort=score+desc,id+desc' <?xml version="1.0" encoding="UTF-­‐8"?> <response> <lst name="responseHeader"> <int name="status">0</int> <int name="QTime">189</int> <lst name="params"> <str name="sort">score desc,id desc</str> <str name="q">*:*</str> <str name="cursorMark">*</str> </lst> </lst> <result name="response" numFound="3284000" start="0"> <doc> ... </doc> . . . </result> <str name="nextCursorMark">AoIIP4AAACY5OTk5OTA=</str> </response>
  • 49. Use the scroll Luke curl -­‐XGET 'localhost:8983/solr/select?q=*:*&sort=score+desc,id+desc &cursorMark=AoIIP4AAACY5OTk5OTA='
  • 50. Use the scroll Luke curl -­‐XGET 'localhost:8983/solr/select?q=*:*&sort=score+desc,id+desc &cursorMark=AoIIP4AAACY5OTk5OTA=' <?xml version="1.0" encoding="UTF-­‐8"?> <response> <lst name="responseHeader"> <int name="status">0</int> <int name="QTime">184</int> <lst name="params"> <str name="sort">score desc,id desc</str> <str name="q">*:*</str> <str name="cursorMark">AoIIP4AAACY5OTk5OTA=</str> </lst> </lst> <result name="response" numFound="3284000" start="0"> <doc> ... </doc> . . . </result> <str name="nextCursorMark">AoIIP4AAACY5OTk5ODE=</str> </response>
  • 51. Limiting faceting, why bother? curl -­‐XGET 'localhost:8983/solr/select?q=*:*&facet=true&facet.field=tag&… facet.limit=-­‐1&facet.mincount=0'
  • 52. Limiting faceting, why bother? curl -­‐XGET 'localhost:8983/solr/select?q=*:*&facet=true&facet.field=tag&… facet.limit=-­‐1&facet.mincount=0' <?xml version="1.0" encoding="UTF-­‐8"?> <response> <lst name="responseHeader"> <int name="status">0</int> <int name="QTime">9967</int> <lst name="params"> ... </lst> </lst> <result name="response" numFound="3284000" start="0"> . . . </result> <lst name="facet_counts"> <lst name="facet_fields"> <lst name="tag"> ... </lst> </lst> </lst> </response>
  • 53. Limiting faceting, why bother? curl -­‐XGET 'localhost:8983/solr/select?q=*:*&facet=true&facet.field=tag&… facet.limit=-­‐1&facet.mincount=0' <?xml version="1.0" encoding="UTF-­‐8"?> <response> . . . <lst name="error"> <str name="msg">Error while processing facet fields: java.lang.OutOfMemoryError: Java heap space</str> <str name="trace">org.apache.solr.common.SolrException: Error while processing facet fields: java.lang.OutOfMemoryError: Java heap space . . . Caused by: java.lang.OutOfMemoryError: Java heap space at org.apache.solr.request.SimpleFacets.getFieldCacheCounts(SimpleFacets.java:685) . . . </str> <int name="code">500</int> </lst> </response>
  • 54. Now let’s look at performance
  • 55. Now let’s look at performance
  • 56. Now let’s look at performance
  • 57. Now let’s look at performance
  • 58. Now let’s look at performance
  • 59. Magic happens with small changes curl -­‐XGET 'localhost:8983/solr/select?q=*:*&facet=true&facet.field=tag&… facet.limit=100&facet.mincount=1'
  • 60. Magic happens with small changes
  • 61. Magic happens with small changes
  • 62. Magic happens with small changes
  • 63. Magic happens with small changes
  • 64. Magic happens with small changes
  • 65. Magic happens with small changes
  • 66. Magic happens with small changes
  • 67. Monitoring in production h"p://sematext.com/spm/index.html
  • 68. And remember… Release Notes Solr 4.10.0 <luceneMatchVersion> 3.1 </luceneMatchVersion>
  • 70. We are hiring! Dig Search? Dig Analytics? Dig Big Data? Dig Performance? Dig Logging? Dig working with and in open – source? We’re hiring world – wide! http://sematext.com/about/jobs.html
  • 71. Thank you! Rafał Kuć @kucrafal rafal.kuc@sematext.com Sematext @sematext http://sematext.com http://blog.sematext.com