====== Solr ====== ===== Básicos ===== ==== Instalación e inicio ==== * [[http://lucene.apache.org/solr/|Web del proyecto]] * [[http://lucene.apache.org/solr/tutorial.html|Tutorial básico]] * [[http://wiki.apache.org/solr/FrontPage|Wiki de Apache sobre Solr]] Solr es un sistema de recuperación de información. Se basa en un servidor de búsqueda REST donde se indexan los documentos en formato XML, JSON o HTTP para después realizar consultas sobre estos. \\ Podemos descargarlo desde [[http://www.apache.org/dyn/closer.cgi/lucene/solr/|aquí]] o, en una distribución Linux, instalando el paquete ''solr-common''. \\ Requiere de un servidor de aplicaciones Java, aunque la descarga provee un pequeño servidor ya configurado que podemos ejecutar desde la carpeta examples mediante: $ java -jar start.jar Y al cual accederíamos a partir de la url: ''http://localhost:8983/solr/admin/'' \\ Si en cambio lo instalamos en una distribución linux se serviría mediante Tomcat, donde el puerto por defecto es 8080. \\ Podemos configurar solr a partir del fichero ''solrconfig.xml''. ==== Acciones básicas ==== La acción de indexar crea el índice a partir de los ficheros indicados. Una vez realizado el índice podremos consultar por sus ficheros (acción de retrieval). \\ La descarga de Solr viene con aplicaciones (''post.jar'' y ''post.sh'') para la comunicación con el servidor. Por ejemplo... \\ === Indexar === $ java -jar post.jar solr.xml monitor.xml === Eliminar === Tras eliminar un elemento deberemos hacer un commit (''$ java -jar post.jar'' debería funcionar). Eliminar por identificador: $ java -Ddata=args -Dcommit=no -jar post.jar "SP2514N" Eliminar por nombre: $ java -Ddata=args -jar post.jar "name:DDR" === Consulta de datos === * ''q=video&fl=name,id'', consulta por video sólo retornando los campos ''name'' e ''id''. * ''q=video&fl=name,id,score'', lo mismo que la anterior pero además mostrando el score dado. * ''q=video&fl=*,score'', todos los campos indexados más el score. * ''q=video&wt=json'', respuesta en formato json. * ''q=video&sort=price desc'', respuesta devolviendo por precio descendente. * ''q=video&sort=inStock asc, price desc'' * ''q=video&sort=score desc'' ===== Schema ===== * [[http://wiki.apache.org/solr/SchemaXml|Página de documentación del schema]] Es el elemento que define cómo se trata el indexado y la recuperación de los datos. Podemos acceder a partir de: ''/admin/schema.jsp''. \\ En el paquete descargable de Solr encontramos este fichero en la ruta: ''solr/conf''. ==== Tipos de datos ==== * [[http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters]] Los tipos de datos posibles los encontramos dentro de la sección '''', en la lista ''''. Podemos configurar su comportamiento (si los strings se comprimirán, si serán indexados...) a partir de aquí. === Indicar que se filtren stopwords === === Indicar que se tenga en cuenta las mayúsculas y minúsculas === ==== Campos ==== En la sección '''' se declaran elementos '''' que son lo que se utilizará en tu aplicación. \\ Cada '''' tiene un nombre y un tipo asociado. === Opciones comunes de los campos === * ''default'', valor por defecto del campo si no se da ninguno. * ''indexed'', si se indexará. * ''stored'', si se devolverá en la búsqueda. * ''compressed'', si el valor ha de ser comprimido. * ''compressedThreshold'', a partir de qué tamaño se comprimirá. * ''multiValued'', si puede tener múltiples valores. === Opciones avanzadas === * ''omitNorms'' * ''omitTermFreqAndPositions'' * ''omitPositions'' * ''termVectors'' * ''termPositions'' * ''termOffsets'' === Campos dinámicos === Definen campos que no están definidos (yeah!). Por ejemplo podríamos decir que, cuando llegase un campo que acabase en "_i" y no estuviese explícitamente definido se crease: ==== Otra configuración ==== Más configuraciones que aparecen en el schema... * '''' indica que es un campo único, no puede haber otro igual en el índice. Si un documento se añade con el mismo valor en este campo que otro ya existente, el ya existente será eliminado. * '''' indica que campo es en el que se hará la búsqueda si en la query no se indica. * '''', indica cual de los dos operadores (AND o OR) se utiliza en las queries. * '''' * '''' ===== Carga de documentos ===== ==== Otros formatos ==== === Archivos .csv === * [[http://wiki.apache.org/solr/UpdateCSV]] === Archivos json === * [[http://wiki.apache.org/solr/UpdateJSON]] ===== Retrieval ===== ==== Formato de queries ==== * [[http://wiki.apache.org/solr/SolrQuerySyntax|Sintaxis de queries]] * [[http://wiki.apache.org/solr/CommonQueryParameters|Parámetros de queries]] ==== Queries con relevancia ==== * [[http://wiki.apache.org/solr/SolrRelevancyFAQ]] ==== Queries avanzadas ==== * [[http://wiki.apache.org/solr/SolrRelevancyCookbook]] ==== Faceted search ==== ===== Uso de Solr desde programación ===== ==== SolrPy ==== * [[http://code.google.com/p/solrpy/|Web del proyecto]] * [[http://packages.python.org/solrpy/|Documentación]] Es una librería para el acceso a Solr desde Python. Es fácilmente instalable (con ''easy_install solrpy'') y un ejemplo de uso sería: import solr # create a connection to a solr server s = solr.SolrConnection('http://example.org:8083/solr') # add a document to the index s.add(id=1, title='Lucene in Action', author=['Erik Hatcher', 'Otis Gospodnetić']) s.commit() # do a search response = s.query('title:lucene') for hit in response.results: print hit['title'] === Métodos útiles === * ''delete(id, ids, queries)'' * ''delete_many(ids)'' * ''delete_query(query)'' * ''commit()'' * ''add(doc)'' * ''add_many(docs)'' * ''.query(q, fields=None, highlight=None, score=True, sort=None, sort_order="asc", **params)'' ===== Notas ===== ==== Documentos ==== * {{sistemas:solr:index-text-html-solr.pdf|Indexar textos y html con Solr}}