Introducción a SOLR. Explicación de qué es y cómo funciona la búsqueda facetada en SOLR: http://www.lucidimagination.com/Community/Hear-from-the-Experts/Articles/Faceted-Search-Solr, escrito por Yonik Seeley, el creador de SOLR.
Cómo probar SOLR en 5 minutos: http://lucene.apache.org/solr/tutorial.html
Un ejemplo de query con restricciones (lo que sigue es lo que se debe escribir en la URL del navegador): localhost:8983/solr/select?q=monitor&fl=name,popularity,manu&facet=on&facet.field=manu&fq=popularity:6&fq=manu:"Dell,%20Inc
La sintaxis completa de query: http://wiki.apache.org/solr/SimpleFacetParameters
Descargar SOLR desde http://www.eu.apache.org/dist//lucene/solr/1.4.1/apache-solr-1.4.1.tgz y desplegar el contenido.
Instalar sudo aptitude install curl
java -jar start.jar en apache-solr-1.4.1/example
sh post.sh *.xml en apache-solr-1.4.1/example/exampledocs
Importante si se cambia el esquema (schema.xml):
Parar SOLR.
Borrar el índice (rm -r solr/data/index)
Rearrancar (start.jar)
Reindexar (post.sh)
Cuidado con UTF8 y tomcat: http://wiki.apache.org/solr/SolrTomcat
Cómo añadir clases propias (como un nuevo TokenFilter): crear el jar, ubicarlo en algún directorio lib y añadir el path en solr/conf/solrconfig.xml (por ejemplo <lib path=”lib/MyTokenFilter.jar”/>
<schema name="example" version="1.2"> <!--1.2" is Solr's version-->
<types>
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
<fieldType name="text" class="solr.TextField" positionIncrementGap="100" >
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory"
pattern="((\p{L}+([-\x26'+/@_~·.]\p{L}+)*)|([\p{Nd}\p{Nl}\p{No}]+([-',./][\p{Nd}\p{Nl}\p{No}]+)*[%]?))"
group="0"
/>
<filter class="solr.PatternReplaceFilterFactory"
pattern="[.]" replacement="" replace="all"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
</types>
<fields>
<field name="id" type="string" indexed="true" stored="true" required="true"/>
<field name="name" type="text" indexed="true" stored="true"/>
<field name="date" type="text" indexed="true" stored="true"/>
<field name="ALTname" type="text" indexed="true" stored="true" multiValued="true"/>
</fields>
<uniqueKey>id</uniqueKey>
<defaultSearchField>name</defaultSearchField>
<solrQueryParser defaultOperator="AND"/>
</schema>
El esquema schema.xml debe contener un campo _version_:
En solrconfig.xml hay un campo por defecto para las búsquedas:
<str name="df">text</str>
lo que generará un error al arrancar SOLR si el esquema no tiene ese campo definido.
Peligros: http://www.lucidimagination.com/blog/2010/01/21/the-seven-deadly-sins-of-solr/
Estrategias para actualizar el índice: http://blogs.7digital.com/dev/2010/07/07/commit-strategies-for-incremental-solr-updates/
Falta de soporte para información anidada o jerárquica: http://lucene.472066.n3.nabble.com/One-item-multiple-fields-and-range-queries-td475030.html
Más sobre la cuestión: http://www.slideshare.net/MarkHarwood/proposal-for-nested-document-support-in-lucene
Tiempos típicos de indexación (66.000 registros MARC, 2GB RAM, 2.8GHz): 35 minutos de subida (6 minutos de de usuario) pero sólo 2,5 segundos de commit. Tamaño del índice: 48MB