View
131
Download
3
Category
Preview:
Citation preview
!
Extendiendo Solr
Search Update
SolrRequestHandler
Sear
chCo
mpo
nent
s
UpdateHandler
UpdateProcessors
Dispatcher
DocTransformers
QueryResponseWriter
SolrCache QParser
schema.xml
solrconfig.xml
Response
Text Analysis
Index
Query
Lucene Index
Query
ValueSourceParser
!"
DirectoryFactory
CodecFactory
IndexSchemaFactoryTokenFilter MergePolicy
MergePolicy
CacheRegenerator
Ilustration by Jorge Luis Betancourt GonzálezYou may freely use it as long as you attribute to the author, to the CC-by license www.creativecommons.org
QParserPlugin
El proyecto
Librerías necesarias …
solr-core-* solr-solrj-* solr/dist/
slf4j-api-*solr/dist/solrj-lib
example/solr-webapp/webapp/WEB-INF/lib
lucene-core-*
SearchComponent
Ejecutar alguna lógica determinada durante el proceso de búsqueda, puede ser antes de la ejecución de la query o
después sobre el resultado de la query.
Todos los componentes necesitan heredar de la clase abstracta
!
SearchComponent !
del paquete org.apache.solr.handler.component
public void prepare(ResponseBuilder rb)
Prepara la respuesta, se garantiza que se llama antes que el método process() de cualquier otro SearchComponent.
public void process(ResponseBuilder rb)
Ejecuta la lógica de procesado para este componente.
public String getSource();
Método de ayuda devuelve el nombre del archivo que implementa el componente, ej.: cu.orion.MaxParameters
public String getDescription();
Devuelve una breve descripción sobre lo que debe hacer el método, utilizado para debug.
Parámetros de configuración<searchComponent name="max-parameters" class="orion.MaxParamsSearchComponent"> <str name="rows">10</str> <str name="start">2</str> </searchComponent>
parámetros de configuración del componente
public void init( NamedList args )
Este método tiene acceso a los parámetros de configuración definidos en el archivo solrconfig.xml
public void init(NamedList args) { if (null != args) { SolrParams params = SolrParams.toSolrParams(args); } }
SolrParamspublic Boolean getBool(String param, boolean def) public int getInt(String param, int def) public float getFloat(String param, float def) public double getDouble(String param, double def) public String get(String param, String def)
maxRowsParam = params.getInt("rows", -1); !maxStartParam = params.getInt("start", -1)
llave/nombre
valor por defecto
Implementar un componente que no permita pedir más de un número N de
documentos en cada petición.
demo
mkdir -p solr/collection1/lib
Copiar el .jar desde el directorio de compilación de nuestro proyecto hacia:
!
solr/collection1/lib
<searchComponent name="max-parameters" class="cu.uci.solr.MaxSearchComponent"> <str name="rows">10</str> <str name="start">2</str> </searchComponent>
<arr name="first-components"> <str>max-parameters</str> </arr>
<response> <lst name="responseHeader"> <int name="status">400</int> <int name="QTime">19</int> </lst> <lst name="error"> <str name="msg"> Your start or rows parameter has exceeded the allowed values </str> <int name="code">400</int> </lst> </response>
/select?q=*:*&rows=200
Excepciones de SolrExceptionpublic enum ErrorCode { BAD_REQUEST( 400 ), UNAUTHORIZED( 401 ), FORBIDDEN( 403 ), NOT_FOUND( 404 ), SERVER_ERROR( 500 ), SERVICE_UNAVAILABLE( 503 ), UNKNOWN(0); }
Estos códigos son equivalentes a los códigos HTTP ya vistos.
throw new SolrException( SolrException.ErrorCode.BAD_REQUEST, "Your start or rows parameter has exceeded the allowed values");
curl --head http://localhost:8983/solr/collection1/select\?q\=\*:\*\&rows\=200
HTTP/1.1 400 Bad Request Cache-Control: no-cache, no-store Pragma: no-cache Expires: Sat, 01 Jan 2000 01:00:00 GMT Last-Modified: Mon, 29 Sep 2014 02:10:56 GMT ETag: "148bf2cc9d6" Content-Type: application/xml; charset=UTF-8 Content-Length: 0
DocTransformers
Nos permite añadir/quitar campos de la respuesta que se envía al cliente justo
antes de ser serializada. Se puede añadir o remover campos independientemente
del parámetro fl.
Para crear un DocTransformer se
necesitan 2 clases
MyDocTransformer
MyDocTransformerFactory
MyDocTransformerFactory
TransformerFactory
MyDocTransformer
DocTransformer
public DocTransformer create( String field, SolrParams params, SolrQueryRequest req)
Factory
public void init(NamedList args)
método responsable de crear una instancia del DocTransformer
public String getName()
DocTransformer
public void transform( SolrDocument doc, int docid)
añade/quita campos de la instancia de SolrDocument
demo
<transformer name="mytrans2" class="my.transform.MyDocTransformerFactory"> <int name="value">5</int> </transformer>
/select?q=*:*fl=[name]
solrconfig.xml
getName()
Recommended