2010-04-26 18 views
27

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.¿Puede un índice de Lucene sin procesar ser cargado por Solr?

He intentado configurar DataDir de Solr en solrconfig.xml, con la esperanza de que recoja felizmente los archivos de índice existentes, pero parece que simplemente los ignora.

Mi pregunta principal es:

Puede Solr usarse para acceder a los índices de Lucene creados en otros lugares? ¿O podría haber una mejor solución?

+0

posible duplicado: http://stackoverflow.com/questions/2195404/very-basic-dude-with-solr-lucene –

+0

Gracias por el cara a cara. Desafortunadamente, nadie le ha dado a este enfoque un pulgar hacia arriba o un pulgar hacia abajo todavía ... –

+0

una pregunta de seguimiento, ¿es posible cargar el índice Lucene que usa un códec no predeterminado en Solr, como SimpleTextCodec? –

Respuesta

11

Nunca he intentado esto, pero tendría que ajustar schema.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 schema.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 encantaría leer las respuestas de las personas que realmente lo hicieron.

+0

Estoy mirando el índice usando Luke y no es terriblemente complejo. Hay 14 campos, todos escritos como cadenas. Le daré la configuración que sugirió probar e informar. ¡Gracias! –

+0

luke es tu amigo aquí :) –

25

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

Éstos son mis pasos completos para cualquier persona interesada:

  1. descargados Solr y dist copiado/apache-Solr-1.4.0.war a tomcat/webapps
  2. ejemplo Copiado/Solr/conf/usr/local/Solr/
  3. copiado los archivos preexistentes índice Lucene// local/Solr/datos/usr índice
  4. Conjunto solr.home a/usr/local/Solr
  5. En solrconfig.xml, cambiado dataDir a/usr/local/solr/data (Solr busca el índice dir ectory interior)
  6. Loaded mis índices de Lucene en Lucas para navegar (herramienta impresionante)
  7. En el ejemplo schema.xml, elimina todos los campos y tipos de campos a excepción de "cadena"
  8. En el ejemplo schema.xml, añadido 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 un ID de documento
  10. En el ejemplo schema.xml, defaultSearchField cambiado al campo en mi índice que parecía contener
  11. términos
  12. Tomcat empezar, no vieron excepciones, finalmente, y con éxito corrieron algunas consultas en localhost: 8080/Solr/admin

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

+0

Esto funcionó perfectamente para mí usando Solr 5.2.0 con la adición de que tuve que especificar, en solrconfig.xml que no estaba usando un esquema administrado: ' ' ¡No está mal para una respuesta de 5 años! – tgood

1

tres pasos en el final:

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

tengo mi estudio notas here para aquellos que son nuevos en Solr, como yo :)
Para generar algo de energía Si usted mismo se indexa, 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())); 
    } 
} 
0
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 

dir solar de configuración

<directoryFactory name="DirectoryFactory" 

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

pero no con HDFS como debajo de

<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> 

Bloqueo tipo hdfs

+1

si tiene un problema que no se soluciona con estas respuestas, por favor [haga una nueva pregunta] (https://stackoverflow.com/questions/ask) –

Cuestiones relacionadas