tutorial query features examples descargar api search lucene solr

api - query - ¿Solr puede cargar un índice de Lucene sin procesar?



solr vs elasticsearch (4)

Algunos colegas míos tienen una gran aplicación web Java que utiliza un sistema de búsqueda creado con Lucene Java. Lo que me gustaría hacer es tener una buena API basada en HTTP para acceder a los índices de búsqueda existentes. He usado a Nutch antes y me gustó lo simple que fue la implementación de OpenSearch para obtener resultados como RSS.

Intenté configurar el dataDir de Solr en solrconfig.xml, con la esperanza de que recogiera los archivos de índice existentes, pero parece que simplemente los ignora.

Mi pregunta principal es:

¿Se puede usar Solr para acceder a los índices de Lucene creados en otro lugar? ¿O podría haber una mejor solución?


¡Éxito! Con la sugerencia de Pascal de cambios en schema.xml, lo puse en funcionamiento en muy poco tiempo. ¡Gracias!

Estos son mis pasos completos para cualquier persona interesada:

  1. Solr descargado y dist / apache-solr-1.4.0.war a tomcat / webapps
  2. Ejemplo copiado / solr / conf a / usr / local / solr /
  3. Archivos de índice Lucene preexistentes copiados a / usr / local / solr / data / index
  4. Establezca solr.home en / usr / local / solr
  5. En solrconfig.xml, dataDir cambiado a / usr / local / solr / data (Solr busca el directorio de índice dentro)
  6. Cargué mis índices Lucene en Luke para navegar (herramienta increíble)
  7. En el ejemplo schema.xml, eliminó todos los campos y tipos de campo a excepción de "cadena"
  8. En el ejemplo schema.xml, se agregaron 14 definiciones de campo correspondientes a los 14 campos que se muestran en Lucas. Ejemplo: <field name="docId" type="string" indexed="true" stored="true"/>
  9. En el ejemplo schema.xml, cambié uniqueKey al campo en mi índice que parecía ser una identificación de documento
  10. En el ejemplo schema.xml, cambié defaultSearchField al campo en mi índice que parecía contener términos
  11. Inició tomcat, no vio excepciones por fin, y ejecutó con éxito algunas consultas en localhost: 8080 / solr / admin

Esto es solo una prueba para mí de que puede funcionar. Obviamente hay mucha más configuración por hacer.


Nunca he intentado esto, pero tendría que ajustar el esquema.xml para incluir todos los campos de los documentos que están en su índice Lucene, porque Solr no le permitirá buscar un campo si no está definido en el esquema .xml.

El ajuste a schema.xml también debe incluir la definición de los analizadores de tiempo de consulta para buscar adecuadamente en su campo, especialmente si el campo está indexado mediante analizadores personalizados.

En solrconfig.xml, puede que tenga que cambiar la configuración en las secciones indexDefaults y mainIndex.

Pero me gustaría leer las respuestas de las personas que realmente lo hicieron.


Tres pasos al final:

  1. Cambie schema.xml o ( managed-schema )
  2. Cambie < dataDir > en solrconfig.xml
  3. Reiniciar Solr

here tengo mis notas de estudio para aquellos que son nuevos en Solr, como yo :)
Para generar algunos índices lucene usted mismo, puede usar mi código here .

public class LuceneIndex { private static Directory directory; public static void main(String[] args) throws IOException { long startTime = System.currentTimeMillis(); // open Path path = Paths.get("/tmp/myindex/index"); directory = new SimpleFSDirectory(path); IndexWriter writer = getWriter(); // index int documentCount = 10000000; List<String> fieldNames = Arrays.asList("id", "manu"); FieldType myFieldType = new FieldType(); myFieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS); myFieldType.setOmitNorms(true); myFieldType.setStored(true); myFieldType.setTokenized(true); myFieldType.freeze(); for (int i = 0; i < documentCount; i++) { Document doc = new Document(); for (int j = 0; j < fieldNames.size(); j++) { doc.add(new Field(fieldNames.get(j), fieldNames.get(j) + Integer.toString(i), myFieldType)); } writer.addDocument(doc); } // close writer.close(); System.out.println("Finished Indexing"); long estimatedTime = System.currentTimeMillis() - startTime; System.out.println(estimatedTime); } private static IndexWriter getWriter() throws IOException { return new IndexWriter(directory, new IndexWriterConfig(new WhitespaceAnalyzer())); } }


I am trying the same steps with HDF as the home directory and locktype as HDFS but no luck. I see the below error labs_shard1_replica1: org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Index dir ''hdfs://127.0.0.1/user/solr/labs/core_node1/data/index/'' of core ''labs_shard1_replica1'' is already locked. The most likely cause is another Solr server (or another solr core in this server) also configured to use this directory; other possible causes may be specific to lockType: hdfs

configuración solar dir

<directoryFactory name="DirectoryFactory"

class = "$ {solr.directoryFactory: solr.NRTCachingDirectoryFactory}">

pero no con HDFS como abajo

<directoryFactory name="DirectoryFactory" class="solr.HdfsDirectoryFactory"> <str name="solr.hdfs.home">hdfs://127.0.0.1/user/solr</str> <bool name="solr.hdfs.blockcache.enabled">true</bool> <int name="solr.hdfs.blockcache.slab.count">1</int> <bool name="solr.hdfs.blockcache.direct.memory.allocation">false</bool> <int name="solr.hdfs.blockcache.blocksperbank">16384</int> <bool name="solr.hdfs.blockcache.read.enabled">true</bool> <bool name="solr.hdfs.blockcache.write.enabled">false</bool> <bool name="solr.hdfs.nrtcachingdirectory.enable">true</bool> <int name="solr.hdfs.nrtcachingdirectory.maxmergesizemb">16</int> <int name="solr.hdfs.nrtcachingdirectory.maxcachedmb">192</int> </directoryFactory>

Bloquear tipo hdfs