Curso Formacion Apache Solr

2,298 views
2,171 views

Published on

Presentación curso de Apache Solr. A través de la realización de ejercicios prácticos, se obtendrán conocimientos sobre la implantación de tecnologías Solr, configuración, indexación, análisis y resolución de problemas comunes.

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,298
On SlideShare
0
From Embeds
0
Number of Embeds
467
Actions
Shares
0
Downloads
75
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Curso Formacion Apache Solr

  1. 1. Apache Solr
  2. 2. ¿Quiénes Somos? Expertos en sistemas de búsqueda, repositorios digitales y recomendación . Referencia Relevante : 24Symbols, BBVA o Biblioteca Nacional.
  3. 3. www.openandsearch.com
  4. 4. Índice <ul><ul><li>Conceptos y descripción de Apache Solr </li></ul></ul><ul><ul><li>Preparando el terreno </li></ul></ul><ul><ul><ul><li>¿Cómo lo instalamos? </li></ul></ul></ul><ul><ul><ul><li>Configurando Apache Solr </li></ul></ul></ul><ul><ul><li>Con las manos en la masa </li></ul></ul><ul><ul><ul><li>Modificando el índice </li></ul></ul></ul><ul><ul><ul><li>Consultando el índice </li></ul></ul></ul><ul><ul><ul><li>Análisis personalizado </li></ul></ul></ul><ul><ul><li>Clustering </li></ul></ul><ul><ul><li>Operaciones y Mantenimiento </li></ul></ul>
  5. 5. ¿Qué es Apache Solr? <ul><ul><li>Es un servidor de búsqueda full-text  basado en Apache Solr </li></ul></ul><ul><ul><li>Utiliza protocolos estándar de comunicación como HTTP y HTTPS </li></ul></ul><ul><ul><li>Es  altamente escalable </li></ul></ul><ul><ul><li>Es  totalmente modular  gracias a su sistema de plugins </li></ul></ul><ul><ul><li>Ofrece una interfaz (simple) de administración web </li></ul></ul><ul><ul><li>Está construido utilizando la tecnología de  Apache Lucene </li></ul></ul>
  6. 6. Componentes Principales <ul><ul><li>RequestHandlers : Procesan la consulta solicitada </li></ul></ul><ul><ul><li>SearchComponents : Añaden datos (de la consulta) a la respuesta </li></ul></ul><ul><ul><li>ResponseWriters : Transforman a formato de respuesta concreto. </li></ul></ul><ul><ul><li>SolrCore : conjunto de configuración y documentos </li></ul></ul><ul><ul><li>UpdateHandler : Lógica de actualización de documentos </li></ul></ul><ul><ul><li>Cache : Estrategia de caching. </li></ul></ul>
  7. 8. Instalando Apache Solr: Requisitos <ul><ul><li>Java 1.5 o posterior (http://www.java.com/es/download) </li></ul></ul><ul><ul><li>Servidor de Aplicaciones con soporte para Servlets 2.4 </li></ul></ul><ul><ul><li>Tomcat 5.5.X+ </li></ul></ul>
  8. 9. Instalando Apache Solr: Despliegue <ul><ul><li>Despliegue del fichero WAR en contenedor </li></ul></ul><ul><ul><li>Configuración del SOLR_HOME </li></ul></ul><ul><ul><ul><li>JNDI </li></ul></ul></ul><ul><ul><ul><li>Variable de entorno </li></ul></ul></ul><ul><ul><li>Estructura del directorio SOLR_HOME </li></ul></ul><ul><ul><ul><li>solrconfig.xml </li></ul></ul></ul><ul><ul><ul><li>schema.xml </li></ul></ul></ul><ul><ul><ul><li>solr.xml ( opcional ) </li></ul></ul></ul>
  9. 10. Configurando Apache Solr: Ficheros <ul><ul><li>solr.xml : configuración de los SolrCores activos </li></ul></ul><ul><ul><li>schema.xml : Configuración de campos y procesado </li></ul></ul><ul><ul><li>solrconfig.xml : Configuración de componentes </li></ul></ul><ul><ul><li>Varios : Ficheros de sinónimos, stopwords, etc. </li></ul></ul>
  10. 11. Configurando Apache Solr: solr . xml < solr persistent =&quot;true&quot; sharedLib =&quot;lib&quot;>       < cores adminPath =&quot;/admin/cores&quot;>            < core name =&quot;pdg&quot; instanceDir =&quot;/etc/solr/cores/pdg&quot; />           <core name=&quot;geoeuskadi&quot; instanceDir=&quot;/etc/solr/geoeuskadi&quot; />           <core name=&quot;24symbols&quot; instanceDir=&quot;/etc/solr/24symbols&quot; />           <core name=&quot;cmt&quot; instanceDir=&quot;/etc/cores/cmt&quot; />           <core name=&quot;disofic&quot; instanceDir=&quot;/etc/solr/disofic&quot; />           <core name=&quot;cdl&quot; instanceDir=&quot;/etc/solr/cdl&quot; />           <core name=&quot;24sac&quot; instanceDir=&quot;/etc/solr/24symbolsac&quot; />       </cores> </solr>
  11. 12. Configurando Apache Solr: schema.xml < schema name=&quot;opensearch&quot; version=&quot;1.1&quot;>   < types >     <fieldType name=&quot;string&quot; class=&quot;solr.StrField&quot; sortMissingLast =&quot;true&quot; omitNorms =&quot;true&quot;/>     < fieldType name=&quot;text&quot; class=&quot;solr.TextField&quot; positionIncrementGap =&quot;100&quot;>       < analyzer type=&quot; index &quot;>         < tokenizer class=&quot;solr.HTMLStripStandardTokenizerFactory&quot;/>            < filter class=&quot;solr.LowerCaseFilterFactory&quot;/>         <filter class=&quot;solr.ISOLatin1AccentFilterFactory&quot;/>         <filter class=&quot;solr.StopFilterFactory&quot; ignoreCase=&quot;true&quot; words=&quot;stopwords.txt&quot;/>       </analyzer>       <analyzer type=&quot; query &quot;>         < tokenizer class=&quot;solr.StandardTokenizerFactory&quot;/>         < filter class=&quot;solr.LowerCaseFilterFactory&quot;/>         <filter class=&quot;solr.ISOLatin1AccentFilterFactory&quot;/>         <filter class=&quot;solr.SynonymFilterFactory&quot; ignoreCase=&quot;true&quot; synonyms=&quot;synonyms.txt&quot;/>         <filter class=&quot;solr.StopFilterFactory&quot; ignoreCase=&quot;true&quot; words=&quot;stopwords.txt&quot;/>       </analyzer>     </fieldType>   </types>   < fields >   < field name=&quot;id&quot; type =&quot;string&quot; stored =&quot;true&quot; indexed =&quot;true&quot;/>   <field name=&quot;docName&quot; type=&quot;text&quot; stored=&quot;true&quot; indexed=&quot;true&quot;/>               < dynamicField name=&quot; fecha* &quot; type=&quot;date&quot;  indexed=&quot;true&quot;  stored=&quot;true&quot;/>               <field name=&quot;buscable&quot; type=&quot;text&quot; stored=&quot;false&quot; indexed=&quot;true&quot; multiValued =&quot;true&quot; positionIncrementGap =&quot;50&quot;/>   </fields>   < copyField source=&quot;docName&quot; dest=&quot;buscable&quot;/>   < uniqueKey >id</uniqueKey>   < defaultSearchField >buscable</defaultSearchField>   < solrQueryParser defaultOperator=&quot;AND&quot;/> </schema>
  12. 13. Configurando Apache Solr:  schema.xml <ul><ul><li>field  Type:  Definen el campo y el comportamiento a la hora de indexarlo </li></ul></ul><ul><li>        <fieldType name=&quot;string&quot; class=&quot;solr.StrField&quot;  sortMissingLast =&quot;true&quot;  omitNorms =&quot;true&quot;/> </li></ul><ul><ul><li>field:  Instancia de un tipo de campo bajo una clave propia </li></ul></ul><ul><li>          < field  name=&quot;id&quot;  type =&quot;string&quot;  stored =&quot;true&quot;  indexed =&quot;true&quot;/> </li></ul><ul><ul><li>dynamicField: Conjunto de campos bajo el mismo tipo y el mismo patrón </li></ul></ul><ul><li>             < dynamicField  name=&quot; fecha* &quot; type=&quot;date&quot;  indexed=&quot;true&quot;  stored=&quot;true&quot;/>   </li></ul><ul><ul><li>copyField  :   Copia, antes del procesado, el valor de un campo a otro </li></ul></ul><ul><li>             < copyField  source=&quot;docName&quot; dest=&quot;buscable&quot;/> </li></ul><ul><ul><li>uniqueKey:  Campo que se utilizará como identificador principal </li></ul></ul><ul><li>             < uniqueKey >id</uniqueKey> </li></ul><ul><ul><li>defaultSearchField:  Campo de búsqueda por defecto </li></ul></ul><ul><li>                < defaultSearchField >buscable</defaultSearchField> </li></ul><ul><ul><li>solrQueryParser:  Indica cómo se agruparán las clausulas de la consulta  </li></ul></ul><ul><li>            < solrQueryParser  defaultOperator=&quot;AND&quot;/> </li></ul>
  13. 14. Configurando Apache Solr:  schema.xml <ul><ul><li>Analyzers:  Se componen de un tokenizer y un conjunto de filtros </li></ul></ul><ul><li>         < analyzer  type=&quot; index &quot;> </li></ul><ul><li>                 < analyzer  type=&quot; query &quot;> </li></ul><ul><ul><li>Tokenizer:  Dividen el texto en un conjunto de tokens </li></ul></ul><ul><li>                   < tokenizer  class=&quot; solr.StandardTokenizerFactory &quot;/> </li></ul><ul><ul><li>Filter: Procesan cada uno de los tokens por separado   </li></ul></ul><ul><li>                < filter class=&quot; solr.ISOLatin1AccentFilterFactory &quot;/> </li></ul><ul><li>                  < filter class=&quot; solr.SynonymFilterFactory &quot; ignoreCase=&quot;true&quot; synonyms=&quot;synonyms.txt&quot;/> </li></ul><ul><li>                  < filter class=&quot; solr.StopFilterFactory &quot; ignoreCase=&quot;true&quot; words=&quot;stopwords.txt&quot;/> </li></ul>
  14. 15. Configurando Apache Solr:  solrconfig.xml Propiedades del índice < dataDir >/var/solr/data</dataDir> < indexDefaults >             <!-- Values here affect all index writers and act as a default unless overridden. ->             < useCompoundFile >false</useCompoundFile>            < mergeFactor >10</mergeFactor>            <!-- If both ramBufferSizeMB and maxBufferedDocs is set, then Lucene will flush based on whichever limit is hit first.  --> <!-- <maxBufferedDocs>1000</maxBufferedDocs> --> <!-- Sets the amount of RAM that may be used by Lucene indexing for buffering added documents and deletions before they are flushed to the Directory.  --> < ramBufferSizeMB >32</ramBufferSizeMB> <!-- <maxMergeDocs>2147483647</maxMergeDocs> --> < maxFieldLength >10000</maxFieldLength> < writeLockTimeout >1000</writeLockTimeout> < commitLockTimeout >10000</commitLockTimeout> < lockType >native</lockType> </indexDefaults> < mainIndex > < useCompoundFile >false</useCompoundFile> < ramBufferSizeMB >32</ramBufferSizeMB>   < mergeFactor >10</mergeFactor> </mainIndex>
  15. 16. Configurando Apache Solr:  solrconfig.xml   Configuración de consulta < query >          < maxBooleanClauses >1024</maxBooleanClauses>          < filterCache class=&quot;solr.FastLRUCache&quot; size=&quot;512&quot; initialSize=&quot;512&quot; autowarmCount=&quot;0&quot; />          < queryResultCache class=&quot;solr.LRUCache&quot; size=&quot;512&quot; initialSize=&quot;512&quot; autowarmCount=&quot;0&quot; />          < documentCache class=&quot;solr.LRUCache&quot; size=&quot;512&quot; initialSize=&quot;512&quot; autowarmCount=&quot;0&quot; />          < enableLazyFieldLoading >true</enableLazyFieldLoading>          <cache name=&quot;myUserCache&quot; class=&quot;solr.LRUCache&quot; size=&quot;4096&quot; initialSize=&quot;1024&quot;                      autowarmCount=&quot;1024&quot; regenerator=&quot;org.mycompany.mypackage.MyRegenerator&quot; />          < queryResultWindowSize >20</queryResultWindowSize>          < queryResultMaxDocsCached >200</queryResultMaxDocsCached>          < listener event=&quot; newSearcher &quot; class=&quot;solr.QuerySenderListener&quot;>              <arr name=&quot;queries&quot;>                  <!-- <lst> <str name=&quot;q&quot;>solr</str> <str name=&quot;rows&quot;>10</str> </lst> -->            </arr>          </listener>          < useColdSearcher >false</useColdSearcher>          < maxWarmingSearchers >2</maxWarmingSearchers> </query>
  16. 17. Configurando Apache Solr:  solrconfig.xml Configuración de los RequestHandlers          < requestHandler name=&quot; /spell &quot; class=&quot;solr.SearchHandler&quot; lazy=&quot;true&quot;>               < lst name=&quot;defaults&quot;>                    <!-- omp = Only More Popular -->                   < str name =&quot;spellcheck.onlyMorePopular&quot;> false </str>                   <!-- exr = Extended Results -->                   <str name=&quot;spellcheck.extendedResults&quot;>false</str>                    <!--  The number of suggestions to return -->                   <str name=&quot;spellcheck.count&quot;>1</str>               </lst>               < arr name=&quot; last-components &quot;>                   <str> spellcheck </str>               </arr>          </requestHandler>          < searchComponent name=&quot; spellcheck &quot; class=&quot;solr.SpellCheckComponent&quot;>              <str name=&quot;queryAnalyzerFieldType&quot;>textSpell</str>             <lst name=&quot;spellchecker&quot;>                   <str name=&quot;name&quot;>default</str>                   <str name=&quot;field&quot;>name</str>                   <str name=&quot;spellcheckIndexDir&quot;>./spellchecker</str>             </lst>           </searchComponent>
  17. 18. Modificando el índice: indexación <ul><ul><li>Formatos admitidos </li></ul></ul><ul><ul><ul><li>XML : Formato de intercambio por defecto </li></ul></ul></ul><ul><ul><ul><li>Binario : Serialización Java ( SolrJ ) - commons-codec </li></ul></ul></ul><ul><ul><ul><li>Ficheros binarios : indexación de ficheros DOC , PDF ,etc utilizando Solr Cell ( Apache Tika ) </li></ul></ul></ul><ul><ul><li>  Limitaciones </li></ul></ul><ul><ul><ul><li>Visibilidad : no son visibles hasta que suceda el commit (automático o manual) </li></ul></ul></ul><ul><ul><ul><li>Encoding : solo se soporta indexación en UTF-8 </li></ul></ul></ul><ul><ul><ul><li>Actualización : No existe tal operación. Se añade un documento bajo mismo id. </li></ul></ul></ul>
  18. 19. Modificando el índice:  indexación      Formato de XML de indexación   <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>   < add >                   < doc >                         < field name =&quot;identificador&quot;>http://url.cualquiera.com/webclient/</field>                         <field name=&quot; pid &quot;> 1865905 </field>                         <field name=&quot;thumbnail&quot;>http://url.cualquiera.com/webclient/Delivery</field>                       <field name=&quot;autor&quot;>Castro, Adolfo de 1823-1898 </field>                       <field name=&quot;autor_facet&quot;>Castro, Adolfo de</field>                       <field name=&quot;autor_abreviada&quot;>Castro, Adolfo de-1823-1898-</field>                       <field name=&quot;autor_completa&quot;>Castro, Adolfo de-1823-1898-#</field>                       <field name=&quot;titulo&quot;>Cádiz en la Guerra de la Independencia  : cuadro histórico</field>                       <field name=&quot;editor&quot;>Cádiz Revista Médica </field>                       <field name=&quot;materia&quot;>Cádiz Historia S.XIX </field>                         …               </doc>                 ...   </add>
  19. 20. Modificando el índice:  borrado <ul><ul><li>Tipos de borrado </li></ul></ul><ul><ul><ul><li>ID: Permite borrar una colección de documentos indicando sus identificadores </li></ul></ul></ul><ul><ul><ul><li>Query: Permite especificar una consulta de Lucene. Todos aquellos que satisfagan la consulta serán borrados. </li></ul></ul></ul><ul><ul><li>Limitaciones </li></ul></ul><ul><ul><ul><li>Visibilidad : no son visibles hasta que suceda el commit (automático o manual) </li></ul></ul></ul><ul><ul><ul><li>Encoding: solo se soporta indexación en UTF-8 </li></ul></ul></ul><?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> < delete >          < id >5c9e2d7e-7114-31cf-8582-56f11cefbcce</id>          <id> d0b58756-8a8b-3de2-8327-55023cbdf16f </id>          <id>4d9cb11a-2e2a-34e5-821d-5c7f77a41f8f</id>          <id>fe722eac-d4cb-30f3-b2b5-b9e72630f523</id>          ... </delete> <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> < delete >     < query > category: &quot;Facturas&quot; </query> </delete> Mediante consulta Mediante IDs
  20. 21. Modificando el índice:  operaciones <ul><ul><li>commit:  Las indexaciones y borrados son ejecutados de forma definitiva </li></ul></ul><ul><ul><li>rollback:  Elimina las indexaciones y borrados pendientes de ejecución </li></ul></ul><ul><ul><li>optimize:  Reorganiza el índice y construye un solo segmento </li></ul></ul><ul><ul><li>Consideraciones y limitaciones  </li></ul></ul><ul><ul><ul><li>Las transacciones no están asociadas a sesiones </li></ul></ul></ul><ul><ul><ul><li>A mayor número de documentos en sesión, mayor consumo de memoria </li></ul></ul></ul><ul><ul><ul><li>Bloqueo largo en commits  </li></ul></ul></ul><ul><ul><ul><li>Degradación paulatina del índice </li></ul></ul></ul>
  21. 22. Modificando el índice:  práctica <ul><ul><li>Indexación/borrado: Envío de XML a Solr </li></ul></ul><ul><li>               curl http://127.0.0.1:8983/solr/update -H &quot;Content-Type: text/xml&quot; -d @data.xml </li></ul><ul><ul><li>Commit sin nuevos documentos </li></ul></ul><ul><li>              curl   http://127.0.0.1:8983/solr/update?commit=true </li></ul><ul><ul><li>Commit no bloqueante: </li></ul></ul><ul><li>                curl http://127.0.0.1:8983/solr/update?commit=true&waitSearcher=false </li></ul><ul><ul><li>Commit con nuevos documentos </li></ul></ul><ul><li>               curl http://127.0.0.1:8983/solr/update?commit=true -H &quot;Content-Type: text/xml&quot; -d @data.xml </li></ul><ul><ul><li>Optimize </li></ul></ul><ul><li>             curl   http://127.0.0.1:8983/solr/update?optimize=true </li></ul>
  22. 23. Consultando el índice: básicos <ul><ul><li>El protocolo de comunicación es HTTP </li></ul></ul><ul><ul><li>Los formatos de respuesta son variados </li></ul></ul><ul><ul><ul><li>XML  </li></ul></ul></ul><ul><ul><ul><li>JSON </li></ul></ul></ul><ul><ul><ul><li>binario  (commons-codec / java serialization) </li></ul></ul></ul><ul><ul><ul><li>do-it-yourself </li></ul></ul></ul><ul><ul><li>Aplica teoría de conjuntos  mediante el uso de filterQueries </li></ul></ul><ul><ul><li>Parámetros básicos </li></ul></ul><ul><ul><ul><li>q : texto de la consulta </li></ul></ul></ul><ul><ul><ul><li>q.op : operador por defecto de la consulta </li></ul></ul></ul><ul><ul><ul><li>start :  offset  del conjunto de resultados </li></ul></ul></ul><ul><ul><ul><li>rows : número de elementos a recuperar a partir del start </li></ul></ul></ul><ul><ul><ul><li>sort : campo por el que se realiza la ordenacion </li></ul></ul></ul><ul><ul><ul><li>fl : campos, separados por coma, que se devolverán </li></ul></ul></ul><ul><ul><ul><li>fq : consulta de filtro (ocurrencia múltiple) </li></ul></ul></ul>
  23. 24. Consultando el índice:  básicos curl http://host:8983/opensearch/select/?q=Pilar%20rojo&fl=title,contenttype&start=0&rows=10&wt=xml      < response >      <lst name=&quot; responseHeader &quot;> <int name=&quot; status &quot;>0</int> <int name=&quot; QTime &quot;>293</int> <lst name=&quot; params &quot;> <str name=&quot;wt&quot;>xml</str> <str name=&quot; rows &quot;>10</str> <str name=&quot; start &quot;>0</str> <str name=&quot; q &quot;> Pilar rojo </str> </lst> </lst> < result name=&quot;response&quot; numFound =&quot;2894&quot; start =&quot;0&quot;> <doc>...</doc> <doc>...</doc> <doc>...</doc> < doc > <str name=&quot; contenttype &quot;>text/html; charset=utf-8</str> <str name=&quot; title &quot;> Pilar Rojo participa nos actos do Xacobeo 2010</str> </doc> <doc>...</doc> <doc>...</doc> </result>      </response>
  24. 25. Consultando el índice:  avanzada <ul><ul><li>Selección del RequestHandler </li></ul></ul><ul><ul><ul><li>qt : http://host:8983/opensearch/select?q=Pilar%20rojo&start=0&rows=10& qt=dismax </li></ul></ul></ul><ul><ul><ul><li>Path : http://host:8983/opensearch /dismax ?q=Pilar%20rojo&start=0&rows=10 </li></ul></ul></ul><ul><ul><li>Utilización de sintáxis de consulta avanzada </li></ul></ul><ul><ul><ul><li>phrase slopping :  “jakarta apache”~10 </li></ul></ul></ul><ul><ul><ul><li>fuzzy queries :  sony~0.9 </li></ul></ul></ul><ul><ul><ul><li>wildcarding : c?sa OR casa* </li></ul></ul></ul><ul><ul><ul><li>range queries : [&quot;&quot; to *] </li></ul></ul></ul><ul><ul><ul><li>term boosting : apache^3 </li></ul></ul></ul><ul><ul><li>Utilización de SearchComponents </li></ul></ul><ul><ul><ul><li>Faceting : Búsqueda paramétrica (folding de Amazon, eBay, etc) </li></ul></ul></ul><ul><ul><ul><li>Highlight : Resaltado de los términos que concuerdan de la búsqueda </li></ul></ul></ul><ul><ul><ul><li>Spellcheck : Sugerencias de búsqueda con corrección ortográfica </li></ul></ul></ul><ul><ul><ul><li>MoreLikeThis : Documentos relacionados a partir de uno que actúa de patrón. </li></ul></ul></ul>
  25. 26. Consultando el índice: faceting
  26. 27. Consultando el índice:  faceting <ul><li>     Faceting por valor </li></ul><ul><ul><ul><li>facet : boolean que activa el componente </li></ul></ul></ul><ul><ul><ul><li>facet.field : identifica el campo por el cual se realizará el faceting (ocurrencia múltiple) </li></ul></ul></ul><ul><ul><ul><li>facet.prefix : filtra las facetas que comienzan por este valor </li></ul></ul></ul><ul><ul><ul><li>facet.sort : &quot;count&quot; para ordenar por valor e &quot;index&quot; para hacerlo alfabeticamente </li></ul></ul></ul><ul><ul><ul><li>facet.limit : el numero limite de facets que se devuelven </li></ul></ul></ul><ul><ul><ul><li>facet.offset : offset del conjunto de resultados </li></ul></ul></ul><ul><ul><ul><li>facet.mincount : especifica la cantidad minima referida para que se incluya en un facet </li></ul></ul></ul><ul><ul><ul><li>facet.missing : controla si solr debe calcular un recuento de todos los resultados coincidentes que no tienen ningún valor para el campo </li></ul></ul></ul><ul><ul><ul><li>facet.method : selecciona el algoritmo para realizar el facet (enum o fc) </li></ul></ul></ul><ul><li>     Faceting arbitrario </li></ul><ul><ul><ul><li>facet.query : Especifica una consulta para la que se calcularán los resultados que la matchean </li></ul></ul></ul><ul><li>     Faceting por Fecha </li></ul><ul><ul><ul><li>facet.date : nombre del campo sobre el que se realizará el facet tratándolo como fecha (múltiple) </li></ul></ul></ul><ul><ul><ul><li>facet.date.start : Margen inferior del rango. </li></ul></ul></ul><ul><ul><ul><li>facet.date.end : Margen superior del rango. </li></ul></ul></ul><ul><ul><ul><li>facet.date.gap:  Expresión que marca el intervalo de fechas que se usará en el faceting </li></ul></ul></ul><ul><ul><ul><li>facet.date.hardend : En caso de que el último paso del intervalo sea mayor que  facet.date.end  se utilizará dicha fecha como último salto </li></ul></ul></ul><ul><ul><ul><li>facet.date.other: Intervalos que se deben operar a mayores del especificado con  before, after, between, none y all. </li></ul></ul></ul><ul><ul><ul><li>facet.date.include: Marca los límites del intervalo con lower , upper, edge, outer, all .  </li></ul></ul></ul>
  27. 28. Consultando el índice:  faceting <lst name=&quot; facet_counts &quot;> <lst name=&quot; facet_queries &quot;> <int name=&quot;l ocale:&quot;es_ES&quot; &quot;>16684</int> <int name=&quot; locale_americano &quot;>844</int> </lst> <lst name=&quot; facet_fields &quot;> <lst name=&quot; locale &quot;>          <int name=&quot;es_ES&quot;>16684</int>          <int name=&quot;en_US&quot;>844</int>          <int name=&quot;ca_ES&quot;>110</int>          <int name=&quot;eu_ES&quot;>110</int>          <int name=&quot;gl_ES&quot;>110</int> </lst> </lst> <lst name=&quot; facet_dates &quot;> <lst name=&quot; fecha_resolucion &quot;>          <int name=&quot;2007-08-31T16:17:37.304Z&quot;>4</int>         <int name=&quot;2008-08-31T16:17:37.304Z&quot;>41</int>         <int name=&quot;2009-08-31T16:17:37.304Z&quot;>49</int>         <str name=&quot;gap&quot;>+1YEARS</str>          <date name=&quot;end&quot;>2010-08-31T16:17:37.304Z</date> </lst> </lst> </lst>
  28. 29. Consultando el índice:  faceting <ul><ul><ul><li>Faceting simple </li></ul></ul></ul><ul><li>             /select?q=Cervantes& facet=true & facet.field=category </li></ul><ul><ul><ul><li>Facet múltiple </li></ul></ul></ul><ul><li>                 /select?q=Cervantes&facet=true& facet.field=category & facet.field=collections </li></ul><ul><ul><ul><li>Facet con límite y filtrado </li></ul></ul></ul><ul><li>                  /select?q=vargas+llosa&facet=true&facet.field=category& facet.limit=10 & facet.prefix=Novela </li></ul><ul><ul><ul><li>Facet con mincount y sort </li></ul></ul></ul><ul><li>                   /select?q=vargas+llosa&facet=true&facet.field=category& facet.mincount=10 & facet.sort=index </li></ul><ul><ul><ul><li>Facet por fechas </li></ul></ul></ul><ul><li>           &facet=true& facet.date.start =-30DAY& facet.date.start = + 30DAY& facet.date.gap =+1DAY </li></ul><ul><ul><ul><li>Configuración por campo </li></ul></ul></ul><ul><li>                   &facet=true&facet.field=category&facet.field=locale& f.category.facet.mincount =200   </li></ul><ul><ul><ul><li>Exclusión de filtros </li></ul></ul></ul><ul><li>                 /select?q=vargas&fq= {!tag=dt} category:&quot;Novela Histórica&quot;&facet=true&facet.field=category </li></ul><ul><ul><ul><li>Etiquetado </li></ul></ul></ul><ul><li>                   /select?q=vargas&facet=true&facet.field= {!ex=dt key=Categoría} category </li></ul><ul><li>                   </li></ul>
  29. 30. Consultando el índice:  highlighting <ul><li>     Parámetros </li></ul><ul><ul><ul><li>hl : true para activar el componente </li></ul></ul></ul><ul><ul><ul><li>hl.fl : Campos, separados por comas, donde se efectuará el highlighting </li></ul></ul></ul><ul><ul><ul><li>hl.simple.pre : Valor que se situará antes del término matcheado </li></ul></ul></ul><ul><ul><ul><li>hl.simple.post : Valor que se situará después del término matcheado </li></ul></ul></ul><ul><ul><ul><li>hl.snippets : Número de snippets devueltos </li></ul></ul></ul><ul><ul><ul><li>hl.fragsize : Número de caracteres que serán devueltos </li></ul></ul></ul><ul><li>     Ejemplos </li></ul><ul><li>  </li></ul><ul><ul><ul><li>Selección de campos con expresión </li></ul></ul></ul><ul><li>                 /select?q=exp& hl=true & hl.fl = descripcion_* </li></ul><ul><ul><ul><li>Código de highlighting personalizado </li></ul></ul></ul><ul><li>                 /select?q=exp&hl=true& hl.simple.pre =<span>& hl.simple.post =</span> </li></ul><ul><ul><ul><li>Highlighting de más de 100 caracteres </li></ul></ul></ul><ul><li>                 /select?q=exp&hl=true& hl.fragsize =1500 </li></ul><ul><li>     </li></ul>
  30. 31. Consultando el índice:  highlighting <lst name=&quot; highlighting &quot;> <lst name=&quot; lp_es_ES2567024 &quot;> <arr name=&quot; titulo &quot;> <str>La CMT abre <span class=&quot;highlight&quot;>expediente</span> sancionador a Proyecto Atarfe</str> </arr> </lst> <lst name=&quot; lp_es_ES2574813 &quot;> <arr name=&quot; asunto &quot;> <str>ACUERDO PARA LA INSCRIPCIÓN DE AUTORIZACIÓN GENERAL EN EL <span class=&quot;highlight&quot;>EXPEDIENTE</span> AUT-001/98 DE</str> </arr> <arr name=&quot; expediente &quot;> <str> <span class=&quot;highlight&quot;>Expediente</span> AUT</str> </arr> </lst> <lst name=&quot; lp_es_ES2627601 &quot;> <arr name=&quot; asunto &quot;> <str>RESOLUCION DEL ARCHIVO DEL <span class=&quot;highlight&quot;> EXPEDIENTE</span> DE LA ENTIDAD GOYA SERVICIOS</str> </arr> </lst> ... </lst>
  31. 32. Consultando el índice:  spellchecking <ul><li>     Configuración </li></ul><ul><li>      < searchComponent name=&quot;standardSpellcheck&quot; class=&quot; solr.SpellCheckComponent &quot;> </li></ul><ul><li>       <str name=&quot; queryAnalyzerFieldType &quot;>spellFieldType</str> </li></ul><ul><li><lst name=&quot; spellchecker &quot;> </li></ul><ul><li>        <str name=&quot; name &quot;>default</str> </li></ul><ul><li>         <str name=&quot; field &quot;>SPELL_FIELD</str> </li></ul><ul><li>        <str name=&quot; buildOnCommit &quot;>true</str> </li></ul><ul><li>         <str name=&quot; buildOnOptimize &quot;>true</str> </li></ul><ul><li>         <str name=&quot; spellcheckIndexDir &quot;>./spellchecker</str> </li></ul><ul><li></lst> </li></ul><ul><li>         </searchComponent> </li></ul><ul><li>     </li></ul><ul><ul><li>Parámetros </li></ul></ul><ul><ul><ul><li>spellcheck:  Activa en componente </li></ul></ul></ul><ul><ul><ul><li>spellcheck.count:  Número de sugerencias devueltas </li></ul></ul></ul><ul><ul><ul><li>spellcheck.dictionary:  Selecciona el diccionario a utilizar </li></ul></ul></ul><ul><ul><ul><li>spellcheck.onlyMorePopular:  Devuelve los elementos con más frecuencia </li></ul></ul></ul><ul><ul><ul><li>spellcheck.extendedResults:  Añade información adicional a la respuesta </li></ul></ul></ul><ul><ul><ul><li>spellcheck.collate:   Devuelve la frase con todos los términos corregidos </li></ul></ul></ul>
  32. 33. Consultando el índice:  spellchecking <lst name=&quot; spellcheck &quot;> <lst name=&quot; suggestions &quot;> <lst name=&quot; ipoteca &quot;> <int name=&quot;numFound&quot;>1</int> <int name=&quot;startOffset&quot;>0</int> <int name=&quot;endOffset&quot;>7</int> <arr name=&quot; suggestion &quot;> <str> hipoteca </str> </arr> </lst> <lst name=&quot; vasura &quot;> <int name=&quot;numFound&quot;>1</int> <int name=&quot;startOffset&quot;>8</int> <int name=&quot;endOffset&quot;>14</int> <arr name=&quot; suggestion &quot;> <str> basura </str> </arr> </lst> <str name=&quot; collation &quot;> hipoteca basura </str> </lst> </lst> /select?q= ipoteca%20vasura & spellcheck=true & spellcheck.collate=true & spellcheck.count=1
  33. 34. Análisis personalizado:  CharFilterFactories <ul><ul><li>¿Qué són? </li></ul></ul><ul><ul><li>¿Para qué valen? </li></ul></ul><ul><ul><li>Tipos </li></ul></ul><ul><ul><ul><li>solr. PatternReplaceCharFilterFactor </li></ul></ul></ul><ul><ul><ul><li>solr. HTMLStripCharFilterFactory </li></ul></ul></ul><ul><ul><li>Configuración </li></ul></ul><ul><li>             <analyzer> </li></ul><ul><li>                  < charFilter class=&quot;solr. HTMLStripCharFilterFactory &quot;/> </li></ul><ul><li>                  <tokenizer class=&quot;solr.StandardTokenizerFactory&quot;/> </li></ul><ul><li>             </analyzer> </li></ul>
  34. 35. Análisis personalizado: tokenizers <ul><ul><li>¿Qué són? </li></ul></ul><ul><ul><li>¿Para qué valen? </li></ul></ul><ul><ul><li>Tipos </li></ul></ul><ul><ul><ul><li>solr. WhitespaceTokenizerFactory : Genera tokens a partir de espacios en blanco </li></ul></ul></ul><ul><ul><ul><li>solr. KeywordTokenizerFactory : Genera un único token </li></ul></ul></ul><ul><ul><ul><li>solr. StandardTokenizerFactory : Genera tokens a partir de espacios en blanco y de los signos de puntuación </li></ul></ul></ul><ul><ul><ul><li>solr. LowerCaseTokenizerFactory : Convierte todo a minúsculas y elimina cualquier caracter no letra </li></ul></ul></ul><ul><ul><li>Configuración </li></ul></ul><ul><li>      <analyzer> </li></ul><ul><li>            <charFilter class=&quot;solr.HTMLStripCharFilterFactory&quot;/> </li></ul><ul><li>            < tokenizer class=&quot;solr. StandardTokenizerFactory &quot;/> </li></ul><ul><li>      </analyzer> </li></ul>
  35. 36. Análisis personalizado:  analyzer <ul><ul><li>¿Qué són? </li></ul></ul><ul><ul><li>¿Para qué valen? </li></ul></ul><ul><ul><li>Tipos </li></ul></ul><ul><ul><ul><li>solr. SnowballPorterFilterFactory : Genera lexemas a partir del algoritmo Snowball </li></ul></ul></ul><ul><ul><ul><li>solr. StopFilterFactory : Elimina los tokens a partir de una lista </li></ul></ul></ul><ul><ul><ul><li>solr. SynonymFilterFactory : Genera varios tokens para una misma posición </li></ul></ul></ul><ul><ul><ul><li>solr. LowerCaseFilterFactory : Convierte todos los tokens a minúsculas </li></ul></ul></ul><ul><ul><ul><li>solr. ISOLatin1AccentFilterFactory : Genera el token equivalente sin los caracteres especiales del encoding latin1 </li></ul></ul></ul><ul><ul><ul><li>solr. EdgeNGramFilterFactory : Genera gramas a partir del comienzo de cada token </li></ul></ul></ul><ul><ul><ul><li>solr. RemoveDuplicatesTokenFilterFactory : Elimina tokens duplicados </li></ul></ul></ul><ul><ul><ul><li>solr. LengthFilterFactory : Elimina los tokens que se excedan o se queden sean más cortos que los parámetros indicados </li></ul></ul></ul>
  36. 37. Análisis personalizado:  analyzer <fieldtype name=&quot;teststop&quot; class=&quot;solr.TextField&quot;>     <analyzer>       <tokenizer class=&quot;solr.LowerCaseTokenizerFactory&quot;/>       < filter class=&quot;solr. StopFilterFactory &quot; words =&quot; stopwords.txt &quot; ignoreCase =&quot;true&quot;/>     </analyzer> </fieldtype> <fieldtype name=&quot;testedgengrams&quot; class=&quot;solr.TextField&quot;>     <analyzer>       <tokenizer class=&quot;solr.LowerCaseTokenizerFactory&quot;/>       < filter class=&quot;solr. EdgeNGramFilterFactory &quot; minGramSize =&quot;2&quot; maxGramSize =&quot;15&quot; side =&quot;front&quot;/>     </analyzer> </fieldtype> <fieldtype name=&quot;testkeep&quot; class=&quot;solr.TextField&quot;>     <analyzer>       < filter class=&quot;solr. KeepWordFilterFactory &quot; words=&quot; keepwords.txt &quot; ignoreCase =&quot;true&quot;/>     </analyzer> </fieldtype> <fieldtype name=&quot;syn&quot; class=&quot;solr.TextField&quot;>     <analyzer>         <tokenizer class=&quot;solr.WhitespaceTokenizerFactory&quot;/>         < filter class=&quot;solr. SynonymFilterFactory &quot; synonyms =&quot; syn.txt &quot; ignoreCase =&quot;true&quot; expand =&quot;false&quot;/>     </analyzer> </fieldtype>
  37. 38. Análisis personalizado:  testing
  38. 39. Clustering: replicación <ul><ul><li>¿Qué es la alta disponibilidad? </li></ul></ul><ul><ul><ul><li>Master / esclavo </li></ul></ul></ul><ul><ul><ul><li>Repetidores </li></ul></ul></ul><ul><ul><li>Limitaciones </li></ul></ul><ul><ul><ul><li>Capacidad de indexación </li></ul></ul></ul><ul><ul><ul><li>Tiempo de replicación </li></ul></ul></ul><ul><ul><li>Consideraciones </li></ul></ul><ul><ul><ul><li>Replicación pasiva </li></ul></ul></ul><ul><ul><ul><li>Replicación vía HTTP </li></ul></ul></ul><ul><ul><ul><li>Replicación de ficheros </li></ul></ul></ul>
  39. 40. Alta Disponibilidad: replicación
  40. 41. Clustering: replicación <ul><ul><li>Master </li></ul></ul><ul><ul><li><requestHandler name=&quot;/ replication &quot; class=&quot; solr.ReplicationHandler &quot; > </li></ul></ul><ul><ul><li> <lst name=&quot; master &quot;> </li></ul></ul><ul><ul><li> <str name=&quot; replicateAfter &quot;> commit </str> </li></ul></ul><ul><ul><li> <str name=&quot;replicateAfter&quot;> startup </str> </li></ul></ul><ul><ul><li> <str name=&quot;replicateAfter&quot;> optimize </str> </li></ul></ul><ul><ul><li> <str name=&quot; confFiles &quot;> solrconfig_slave.xml:solrconfig.xml ,schema.xml</str> </li></ul></ul><ul><ul><li> </lst> </li></ul></ul><ul><ul><li></requestHandler> </li></ul></ul><ul><ul><li>Esclavo </li></ul></ul><requestHandler name=&quot;/replication&quot; class=&quot;solr.ReplicationHandler&quot; > <lst name=&quot; slave &quot;> <!– Configurar aquí la URL del servidor maestro --> <str name=&quot; masterUrl &quot;> http://localhost:8080/solr/replication </str> <str name=&quot; pollInterval &quot;> 00:00:10 </str> </lst> </requestHandler>
  41. 42. Clustering: sharding <ul><ul><li>¿Qué es el sharding? </li></ul></ul><ul><ul><ul><li>Búsqueda distribuida </li></ul></ul></ul><ul><ul><ul><li>Indexación distrbuida </li></ul></ul></ul><ul><ul><li>Limitaciones </li></ul></ul><ul><ul><ul><li>Hotspotting </li></ul></ul></ul><ul><ul><ul><li>Capacidad de crecimiento </li></ul></ul></ul><ul><ul><ul><li>IDF distribuido </li></ul></ul></ul><ul><ul><li>Consideraciones </li></ul></ul><ul><ul><ul><li>SolrCloud </li></ul></ul></ul><ul><ul><ul><li>Replication factor </li></ul></ul></ul><ul><ul><ul><li>Autodetección de nodos </li></ul></ul></ul><ul><ul><ul><li>Cluster block </li></ul></ul></ul>
  42. 43. Mantenimiento OpenSearch: operaciones <ul><ul><li>Backup </li></ul></ul><ul><ul><ul><li>Limitaciones </li></ul></ul></ul><ul><ul><ul><ul><li>No debe hacerse durante otras operaciones </li></ul></ul></ul></ul><ul><ul><ul><li>Copia íntegra del directorio ${dataDir} </li></ul></ul></ul><ul><ul><li>Restauración </li></ul></ul><ul><ul><ul><li>Limitaciones </li></ul></ul></ul><ul><ul><ul><ul><li>Evitar índices bloqueados </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Obligatorio parar el servicio </li></ul></ul></ul></ul><ul><ul><ul><li>Copiar el backup al directorio ${dataDir} </li></ul></ul></ul><ul><ul><li>Optimize </li></ul></ul><ul><ul><ul><li>Limitaciones </li></ul></ul></ul><ul><ul><ul><ul><li>Bloquea el directorio </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Espacio de disco libre equivalente al del índice </li></ul></ul></ul></ul><ul><ul><ul><li>http:/local/opensearch/update?stream.body=%3Coptimize/%3E </li></ul></ul></ul>

×