Unos días atrás comenté cómo instalar vufind.
Una vez instalado el software y comprobado que funcionan algunos aspectos fundamentales (como la validación por LDAP, etc), el siguiente paso es proceder a la importación de registros (bien sean desde el Catálogo de la Biblioteca o desde Repositorios OAI).
Paso a comentar algunas conclusiones obtenidas mediante las primeras experiencias de carga.
Carga de registros de prueba procedentes de Innovative Millenium (formato MARC)
Imaginemos que hemos exportado desde Millenium un archivo con registros MARC (.mrc). En caso de que no tengáis una exportación de registros a mano podéis usar (esta página o ésta otra para obtener datos de ejemplo).
Mi fichero se llama $VUFIND_HOME/import/400.mrc
Procedo a importar los registros con la siguiente orden:
/usr/local/vufind/import-marc.sh import/400.mrc |
Más información en la wiki de vufind.
Carga de registros de prueba procedentes de CDS-Invenio (formato MARCXML)
Imaginemos que exportamos de un repositorio un conjunto de registros en formato marcxml, por ejemplo éste.
Creo una carpeta para almacenar estos ficheros .xml exportados:
mkdir $VUFIND_HOME/harvest/desdezaguan mkdir $VUFIND_HOME/harvest/desdezaguan/marcxml cd $VUFIND_HOME/harvest/desdezaguan/marcxml |
Obtengo los registros…
wget http://zaguan.unizar.es/search?as=1&cc=Tesis&m1=a&p1=&f1=&op1=a&m2=a&p2=&f2=&op2=a&m3=a&p3=&f3=&action_search=Buscar&c=Tesis&c=&sf=&so=a&rm=&rg=160&sc=1&of=xm Connecting to zaguan.unizar.es|127.0.0.1|:80... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: `search?as=1' [ <=> ] 38,128 131K/s in 0.3s 2010-09-30 14:11:26 (131 KB/s) - `search?as=1' saved [38128] [1]+ Done wget http://zaguan.unizar.es/search?as=1 |
Cambio el nombre del fichero xml…
mv search\?as\=1 tesis0.xml |
Y procedemos a realizar la importación. Se invoca poniendo como parametro el directorio donde están los XML’s:
[root@ harvest]# cd /usr/local/vufind/harvest; \ ./batch-import-marc.sh desdezaguan-tesis/marcxml/ Now Importing /usr/local/vufind/harvest/desdezaguan-tesis/marcxml//tesis0.xml ... /usr/java/jre1.6.0_17/bin/java -Xms512m -Xmx512m -Dsolrmarc.solr.war.path=/usr/local/vufind/solr/jetty/webapps/solr.war -Dsolr.core.name=biblio -Dsolrmarc.pa th=/usr/local/vufind/import -Dsolr.path=/usr/local/vufind/solr -Dsolr.solr.home=/usr/local/vufind/solr -jar /usr/local/vufind/import/SolrMarc.jar /usr/local/ vufind/import/import.properties /usr/local/vufind/harvest/desdezaguan-tesis/marcxml/tesis0.xml INFO [main] (MarcImporter.java:769) - Starting SolrMarc indexing. INFO [main] (Utils.java:189) - Opening file: /usr/local/vufind/import/import.properties INFO [main] (MarcHandler.java:325) - Attempting to open data file: /usr/local/vufind/harvest/desdezaguan-tesis/marcxml/tesis0.xml INFO [main] (MarcImporter.java:618) - Updating to Solr index at /usr/local/vufind/solr INFO [main] (MarcImporter.java:634) - Using Solr core biblio INFO [main] (SolrCoreLoader.java:102) - Using the data directory of: /usr/local/vufind/solr/biblio INFO [main] (SolrCoreLoader.java:104) - Using the multicore schema file at : /usr/local/vufind/solr/solr.xml INFO [main] (SolrCoreLoader.java:105) - Using the biblio core INFO [main] (MarcImporter.java:266) - Added record 1 read from file: 4841 INFO [main] (MarcImporter.java:266) - Added record 2 read from file: 4840 INFO [main] (MarcImporter.java:266) - Added record 3 read from file: 4823 .... INFO [main] (MarcImporter.java:516) - Adding 160 of 160 documents to index INFO [main] (MarcImporter.java:517) - Deleting 0 documents from index INFO [main] (MarcImporter.java:391) - Calling commit INFO [main] (MarcImporter.java:402) - Done with the commit, closing Solr INFO [main] (MarcImporter.java:405) - Setting Solr closed flag INFO [main] (MarcImporter.java:431) - Connecting to solr server at URL: http://localhost:8080/solr/biblio/update INFO [main] (SolrUpdate.java:135) - <?xml version="1.0" encoding="UTF-8"?> INFO [main] (SolrUpdate.java:135) - <response> INFO [main] (SolrUpdate.java:135) - <lst name="responseHeader"><int name="status">0</int><int name="QTime">136</int></lst> INFO [main] (SolrUpdate.java:135) - </response> INFO [main] (MarcImporter.java:526) - Finished indexing in 0:01.00 INFO [main] (MarcImporter.java:535) - Indexed 10 at a rate of about 8.0 per sec INFO [main] (MarcImporter.java:536) - Deleted 0 records INFO [Thread-2] (MarcImporter.java:465) - Starting Shutdown hook INFO [Thread-2] (MarcImporter.java:484) - Finished Shutdown hook |
La invocacion MUEVE el fichero tesis0.xml y crea:
harvest/desdezaguan/marcxml/log y harvest/desdezaguan/marcxml/processed |
Veamos qué tiene cada carpeta:
[root@ marcxml]# ls -l $VUFIND_HOME/harvest/desdezaguan/marcxml/log/ total 8 -rw-r--r-- 1 root root 3095 Sep 29 12:54 tesis0.xml.log [root@olmo marcxml]# ls -l processed/ total 68 -rw-r--r-- 1 root root 59068 Sep 29 12:49 tesis0.xml (el original) [root@olmo marcxml]# cd log/ [root@olmo log]# more tesis0.xml.log |
*** NOTA: Si el identificador del registro YA EXISTE en vufind no duplica, actualiza el registro
Más información en la wiki de vufind.
Configurando el display name de las facetas solr en vufind
Las facetas se describen en el archivo facets.ini. Os muestro cómo queda nuestro archivo tras la modificación y customización de los nombres que se mostrarán en las facetas. La parte de la izquierda muestra el ‘nombre lógico’ del índice de SOLR y la parte derecha el display name (aka ‘lo que sale en la web como facetas’).
* Nota: funcionan las tildes perfectamente (thanks vufind guys!)
more $VUFIND_HOME/web/conf/facets.ini ; The order of display is as shown below ; The name of the index field is on the left ; The display name of the field is on the right [Results] institution = Origen building = Localización format = Formato ; Use callnumber-first for LC call numbers, dewey-hundreds for Dewey Decimal: callnumber-first = "Call Number" ;dewey-hundreds = "Call Number" authorStr = Autor language = Idioma genre_facet = Genero era = Era geographic_facet = Región ; Facets that will appear at the top of search results when the TopFacets ; recommendations module is used. See the [TopRecommendations] section of ; searches.ini for more details. [ResultsTop] topic_facet = "Suggested Topics" ; This section is reserved for special boolean facets. These are displayed ; as checkboxes. If the box is checked, the filter on the left side of the ; equal sign is applied. If the box is not checked, the filter is not applied. ; The value on the right side of the equal sign is the text to display to the ; user. It will be run through the translation code, so be sure to update the ; language files appropriately. ; ; Leave the section empty if you do not need checkbox facets. ; ; NOTE: Do not create CheckboxFacets using values that also exist in the ; other facet sections above -- this will not work correctly. |
Los nombres de las facetas quedarán tal que asi:

Leer más sobre configuración de facetas en vufind y solr
Asignación de valores a las facetas solr en vufind
Es el próximo paso que queremos dar. Pero antes observemos cómo podemos hacer consultas al motor SOLR de vufind.
En http://yoursite.com:8080/solr/biblio/admin/form.jsp de tu servidor web podemos ver una amigable interfaz que nos permite consultar cómo son las respuestas XML a peticiones de consulta del motor y, de este modo, hacernos una idea de cómo queremos asignar valores a cada una de las partes.
Haced una query. Ver cómo es el XML que devuelve. Fijaos en los valores que tienen los distintos registros devueltos en cada campo. En concreto, y para enseñarlo siempre con un ejemplo, vamos a fijarnos en el campo institution, que por defecto tiene asignado siempre el valor estático ‘MyInstitution’ para cualquier registro importado:
<arr name="institution"> <str>MyInstitution</str> </arr> |
Esto es debido a la siguiente línea del fichero $VUFIND_HOME/import/marc.properties donde a esa faceta se le asigna el valor estático ‘MyInstitution’:
institution = "MyInstitution" |
Imaginemos que queremos que la faceta ‘institution’ haga referencia al origen de los datos. Tendremos varios orígenes distintos: catálogo y repositorio.
Queremos que, si el registro viene del repositorio (Esto es, tiene 980a==’TESIS’) en esta faceta se guarde la cadena “Repositorio”.
Para ello debemos editar el fichero marc_local.properties (este fichero sobreescribe los settings por defecto marcados en marc.properties).
vi $VUFIND_HOME/import/marc_local.properties |
Y añadimos la siguiente línea:
#asignar a la faceta 'institution' el valor de la etiqueta 980a según el <em>mappeo</em> establecido en el fichero <em>zaguan_map.properties</em>
institution = 980a,zaguan_map.properties |
Y el contenido del fichero $VUFIND_HOME/import/zaguan_map.properties es:
[root@ import]# more /usr/local/vufind/import/zaguan_map.properties # Si el valor de la etiqueta marcxml es 'TESIS', asigna a la faceta la cadena 'Repositorio' TESIS = Repositorio |
Del mismo modo imaginemos que, si el registro viene del catálogo (Esto es, tiene 907a==’.b1XXX’) en esta faceta se guarde la cadena “Catálogo”. En el fichero $VUFIND_HOME/import/marc_local.properties pondremos la línea:
# Tomamos los caracteres 1 y 2 de la etiqueta 907a y los <em>mappeamos</em> según el fichero <em>roble_marc.properties</em>. institution = 907a[1-2],roble_map.properties |
Y en roble_marc.properties:
[root@olmo import]# more /usr/local/vufind/import/roble_map.properties b1 = Catalogo |
¡Mucho ojo con los caracteres especiales como el punto (.) pues son interpretados como expresión regular y habría que escaparlos!
También es útil asignar el campo que actuará como identificador de los registros en vufind. En nuestro caso deseamos utilizar el valor de la etiqueta 907a como identificador del registro. Como la etiqueta es repetible deberemos añadir también el modificador first.
Añadimos pues la siguiente línea a marc_local.properties:
id = 907a, first |
Acordaos de reiniciar vufind tras estas modificaciones:
$VUFIND_HOME/vufind.sh restart |
De momento os dejo con el manual de facetas de la wiki de vufind para que sigáis leyendo
Más experiencias en breves!

