2010-07-09 14 views
18

¿Cómo puedo consultar una instancia de solr para todos los nombres de campo (o prefijados)?Solr: ¿Recuperar nombres de campo de un índice de solr?

Quiero usar campos dinámicos como

category_0_s 
category_1_s 
... 

pero no saben cuántos pueden existir. Entonces quiero recuperar todos los campos (preferiblemente con el prefijo "category_").

¿Alguna idea? Gracias

Respuesta

20

Uso del controlador de Lucas:

http://solr:8983/solr/admin/luke?numTerms=0 

Utilice un XPath para obtener todo el campo que tiene la etiqueta a juego dynamicBase la definición campos dinámicos que busca.

+1

¡SÍ! Eso es. Gracias. – floplus

+0

@Philippe No obtendrá los nombres de todos los campos dinámicos en uso, que es lo que pidió el póster original. Lea la pregunta y responda con cuidado. – GoalBased

+0

@GoalBased Ok, pero si en lugar de criticar le dieras una mejor solución, eso ayudaría también. Entonces, para actualizar mi "respuesta", la llamada correcta para los campos dinámicos es http: // host: /solr/collection/schema/dynamicfields. Para ver más opciones, consulte https://cwiki.apache.org/confluence/display/solr/Schema+API – Philippe

1

Si necesita hacer esto desde su aplicación Java, puede usar Solrj y LukeRequestRequestHandler.

Su código sería este.

LukeRequest lukeRequest = new LukeRequest(); 
lukeRequest.setNumTerms(0); 

LukeResponse lukeResponse = lukeRequest.process(server); 

Map<String, FieldInfo> fieldInfoMap = lukeResponse.getFieldInfo(); 

for (Entry<String, FieldInfo> entry : fieldInfoMap.entrySet()) { 

    String fieldName = entry.getKey(); 
    FieldInfo fieldInfo = entry.getValue(); 

    // process fieldInfo  
} 
+0

¿De dónde viene 'faceta'? – tar

+0

Disculpa, fue un error tipográfico. Se corrigió el código para iterar eficientemente a través de las entradas de hashmap. Espero que esto ayude. – cjungel

25

Esta consulta devolverá una lista separada por comas de todos los campos que están en uso, incluidos los dinámicos.

select?q=*:*&wt=csv&rows=0&facet 

Para responder a la pregunta original, esto es cómo obtener una lista de todos los campos a partir de category_

select?q=*:*&wt=csv&rows=0&facet&fl=category_* 

Se necesita la presencia del parámetro facet para hacer este trabajo de consulta en las versiones más recientes de Solr. En versiones anteriores, funcionará sin él.

En versiones anteriores, un comodín en el parámetro fl no funcionará.

+2

En Solr5, incluir tanto 'facet' como' facet.field' causa una 400 Bad Request, pero aún incluye los campos. Salir de 'facet.field' devuelve los campos y un 200 éxito – Izkata

+0

@Izkata ¡Gracias por la mejora! He actualizado mi respuesta. Curiosamente, establecer 'facet = true' no funciona, pero' facet' sin valor funciona. – GoalBased

+0

En Solr 6.3 solo fl = id, categoría ... trabajado sin la faceta = on. Me pregunto si todavía necesito agregar algo en el esquema para mostrar información adicional – gadelkareem