View
106
Download
3
Embed Size (px)
Citation preview
!
Schema/Esquema
?
Define la estructura del índice incluyendo los tipos de datos y los campos.
Estructura y Análisis textual
conf/schema.xml
<?xml version="1.0" encoding="UTF-8" ?> <schema version="1.5" name="simplest-solr"> <fieldType name="string" class="solr.StrField"/> ! <field name="id" type="string" indexed="true" stored="true" required=“true"/> ! <uniqueKey>id</uniqueKey> </schema>
tipos de datos / <fieldType/>
campos / <field/> <uniqueKey/>
Field Types
<fieldType name="string" class="solr.StrField" sortMissingLast="true" />
Sintaxisidentificador
clase la definición del tipo de dato
atributos adicionales, dependen de la clase
• El atributo name, solamente determina un identificador, el atributo class y los demás determinan el comportamiento real del fieldType.
• Dentro de Solr todos los fieldTypes son implementados por una clase de Java.
• Cuando el atributo class comienza con “solr” se refiere a las clases de java del paquete: org.apache.solr.schema.
!
Solr provee varios tipos de datos nativos para manejar datos estructurados (números, fechas, geo-localización, texto sin analizar, etc).
⚒FieldType
PrimitiveFieldType AbstractSpatialFieldType TextField
DateField TrieFieldType StrField BoolField
TrieDateField TrieDoubleField
TrieFloatField
TrieIntField
TrieLongField
IntField
FloatField
DoubleField
LongField
datos estructurados (no texto)
lat/long, formas, geohashing
texto que necesita ser analizado
optimizados para rangos
<fieldType name="string" class="solr.StrField" sortMissingLast="true" />
atributos para manipular el ordenamiento
sortMissingFirst="true"
si ambos están en “false” (por defecto): primero en orden ascendente y últimos en orden descendente.
Strings
<fieldType name="string" class=“solr.StrField" />
Es un tipo de datos que Solr almacenará en el índice sin alterar y sin analizar, se almacena tal y como se envía
Dates / Fechas
<fieldType name="date" class=“solr.TrieDateField" precisionStep=“6" positionIncrementGap="0" />
fieldType optimizado para el almacenamiento de fechas. Solr espera las fechas en el formato ISO-8601: yyyy-MM-ddTHH:mm:ssZ
yyyy = 2012 MM = 05 dd = 22 HH = 09 (24-hr clock) mm = 30 ss = 22 Z = UTC Timezone (Z is for Zulu)
Si se envía en otro formato se obtendrá una excepción de validación
Numeric
<fieldType name="int" class=“solr.TrieIntField" precisionStep=“0" positionIncrementGap="0" />
si deseamos evitar la búsqueda por rangos, basta con especificar precisionStep=“0”.
<fieldType name="int" class=“solr.TrieIntField" precisionStep=“8" positionIncrementGap="0" />
valor a indexar: 327,500precisionStep=“8” Operación Término indexado0: valor original 327500 & 0xFFFFFFFF 327500
8 bits menos significativos 327500 & 0xFFFFFF00 327424
16 bits menos significativos 327500 & 0xFFFF0000 262144
24 bits menos significativos 327500 & 0xFF000000 0
Si tomamos el valor anterior 372,500 y 326,800
Operación Término327500 &
0xFFFFFFFF 327500
327500 & 0xFFFFFF00 327424
327500 & 0xFFFF0000 262144
327500 & 0xFF000000 0
Operación Término326800 &
0xFFFFFFFF 326800
326800 & 0xFFFFFF00 326656
326800 & 0xFFFF0000 262144
326800 & 0xFF000000 0
372,500 326,800
omitNorms
En algunas ocasiones nuestros documentos poseen distintas longitudes
!160
"∞
Solr es capaz de “normalizar” dicho valor a la hora de calcular la relevancia (boost a documentos cortos)
es un valor float basado en la norma de la longitud del documento, el boost del documento y el boost del
campo.
omitNorms=“true” !
omitNorms=“false"
Fields
<field name=“screen_name" type="string" indexed=“true" stored="true" required="true" />
Sintaxisidentificador del campo
nombre del tipo de dato declarado en <fieldType>
indica si el campo es obligatorio
indexed stored
Los campos indexados son utilizados para las
búsquedas y para ordenar los resultados
(relevancia), para facetar, etc.
Los campos almacenados se utilizan
para devolver información al cliente, resaltar los términos
(highlighting).
⚏
<field name=“links" type="string" indexed=“true" stored="true" multivalued="true" />
Campos multievaluados
Indica que el campo del documento puede contener varios valores, o sea este campo puede recibir un “arreglo” de
valores.
<dynamicField name=“*_ss” type="string" indexed=“true" stored="true" multivalued="true" />
Campos dinámicos
No es necesario especificar el nombre del campo, sino un “patrón” de este acepta cualquier campo que cumpla con
dicho patrón.
screen_name_ss username_ss links_ss
<dynamicField name=“*_ss” type="string" indexed=“true" stored="true" multivalued="true" />
Pero, todos los campos serán del mismo tipo.
CopyFieldsCon Solr, podemos copiar varios campos hacia uno solo, creando una especie de campo “catch-all”. Muy útil cuando se desea tener un prompt de búsqueda sobre todo el esquema.
<field name=“screen_name” type="string" indexed=“true” stored="true" multivalued="true" /> !<field name=“tweet” type="string" indexed=“true” stored="true" multivalued="true" />
¡Buscar en ambos campos!
<field name=“all_text” type="string" indexed=“true” stored="true" multivalued="true" /> !<copyField source=“screen_name” dest=“all_text” /> <copyField source=“screen_name” dest=“all_text” />
definir un nuevo campocopiar de los otros campos
hacia el nuevo
Análisis del texto
solr.TextField
<fieldType name="text" class=“solr.TextField" positionIncrementGap=“0"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words=“lang/stopwords_en.txt"/> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType>
tokenizadorfiltros
Proceso de análisisTexto inicial
Tokenizer
Filters
Filters
token token token token
token token token
token token token token
token token token
produce un stream de tokens a partir del
texto inicial
filtros aplican operaciones
sobre los tokens
Tokenizadores de Solr• WhiteSpaceTokenizer: Genera
tokens a partir de los espacios presentes.
• StandardTokenizer: Parsea de forma inteligente el texto, generando tokens en espacios, signos de puntuación y es capaz de generar URLs, acrónimos y dirección de email.
• KeywordTokenizer: Produce un único token con todo el contenido.
Filters• Transformación: Realiza cambios en el
token, tales como llevarlo a minúsculas, hayar la raíz, etc.
• Inyección de Token: Se añaden nuevos tokens al stream (sinónimos).
• Eliminación de Token: Se eliminan algunos tokens del stream (stopwords).
Filters de Solr• StopFilterFactory: Elimina las
stopwords (palabras sin significado). • SynonymFilterFactory: Permite
añadir sinónimos por términos. • LowerCaseFilterFactory:
Transforma todos los términos en minúsculas.
• PorterStemFilterFactory: Aplica un algoritmo de stemming (obtiene la raíz de los términos).
Filters de Solr• ASCIIFoldingFilterFactory:
Lleva los tokens a su representación ASCII.
• PatternReplaceFilterFactory: Utilizar expresiones regulares para reemplazar secuencias de caracteres.
EjemploEste es mi primer tweet. Que bien, UCI!
StandardTokenizer
Este es mi primer tweet
Que bien
LowerCaseFilterFactory
UCI
este es mi primer tweet
que bien uci
SynonymFilterFactory
este es mi primer tweet
que bien uci universidad
este es mi primer tweet
que bien uci universidad
StopFilterFactory
este es mi primer tweet
que bien uci universidad
primer tweet
uci universidad
tokens que son finalmente indexados
primer tweet
uci universidad
prim
univer
PorterStemFilterFactory
raízes de los términos
Página de análisis
analizadores
index query
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType>
diferentes analizadores en diferentes etapas
demo
<?xml version="1.0" encoding="UTF-8" ?> <schema version="1.5" name="sample"> <fieldType name="string" class="solr.StrField"/> <field name="id" type="string" indexed="true" stored="true" required="true"/> <dynamicField name="*" type="string" indexed="true" stored="true" multiValued="true"/> <uniqueKey>id</uniqueKey> </schema>
PONIENDOLO TODO JUNTO