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 |
/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 |
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 |
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 |
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 |
[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 |
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 |
[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. |
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.
Interfaz de consultas a SOLR:

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> |
<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" |
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 |
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 |
#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 |
[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 |
# 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 |
[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:
Acordaos de reiniciar vufind tras estas modificaciones:
$VUFIND_HOME/vufind.sh restart |
$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!