!
Schema/Esquema
?
Define la estructura del índice
incluyendo los tipos de datos y
los campos.
EstructurayAnálisistextual
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>
tiposdedatos/<fieldType/>
campos/<field/> <uniqueKey/>
FieldTypes
<fieldType name="string"
class="solr.StrField"
sortMissingLast="true" />
Sintaxis
identificador
claseladefinicióndeltipo
dedato
atributosadicionales,
dependendelaclase
• 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
sinanalizar,etc).
⚒FieldType
PrimitiveFieldType AbstractSpatialFieldType TextField
DateField TrieFieldType StrField BoolField
TrieDateField TrieDoubleField
TrieFloatField
TrieIntField
TrieLongField
IntField
FloatField
DoubleField
LongField
datosestructurados(notexto)
lat/long,formas,geohashing
textoque
necesitaser
analizado
optimizados
pararangos
<fieldType name="string"
class="solr.StrField"
sortMissingLast="true" />
atributosparamanipularelordenamiento
sortMissingFirst="true"
siambosestánen“false”(pordefecto):primero
enordenascendenteyúltimosenordendescendente.
Strings
<fieldType name="string"
class=“solr.StrField" />
EsuntipodedatosqueSolralmacenaráenelíndicesin
alterarysinanalizar,sealmacenatalycomoseenvía
Dates/Fechas
<fieldType name="date"
class=“solr.TrieDateField"
precisionStep=“6"
positionIncrementGap="0"
/>
fieldTypeoptimizadoparaelalmacenamientodefechas.
SolresperalasfechasenelformatoISO-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)
Siseenvíaenotroformatoseobtendráuna
excepcióndevalidación
Numeric
<fieldType name="int"
class=“solr.TrieIntField"
precisionStep=“0"
positionIncrementGap="0"
/>
sideseamosevitarlabúsquedaporrangos,bastacon
especificarprecisionStep=“0”.
<fieldType name="int"
class=“solr.TrieIntField"
precisionStep=“8"
positionIncrementGap="0"
/>
valoraindexar:327,500
precisionStep=“8” Operación Términoindexado
0: 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
Sitomamoselvaloranterior372,500y326,800
Operación Término
327500 &
0xFFFFFFFF
327500
327500 &
0xFFFFFF00
327424
327500 &
0xFFFF0000 262144
327500 &
0xFF000000
0
Operación Término
326800 &
0xFFFFFFFF
326800
326800 &
0xFFFFFF00
326656
326800 &
0xFFFF0000 262144
326800 &
0xFF000000
0
372,500 326,800
omitNorms
Enalgunasocasionesnuestrosdocumentosposeen
distintaslongitudes
!160
"
∞Solrescapazde“normalizar”dichovaloralahora
decalcularlarelevancia(boostadocumentoscortos)
esunvalorfloatbasadoenlanormadelalongitud
deldocumento,elboostdeldocumentoyelboostdel
campo.
omitNorms=“true”
!
omitNorms=“false"
Fields
<field name=“screen_name"
type="string"
indexed=“true"
stored="true"
required="true" />
Sintaxis
identificadordelcampo
nombredeltipodedato
declaradoen<fieldType>
indicasielcampoes
obligatorio
indexed stored
Loscamposindexados
sonutilizadosparalas
búsquedasypara
ordenarlosresultados
(relevancia),para
facetar,etc.
Loscampos
almacenadosseutilizan
paradevolver
informaciónalcliente,
resaltarlostérminos
(highlighting).
⚏
<field name=“links"
type="string"
indexed=“true"
stored="true"
multivalued="true" />
Camposmultievaluados
Indicaqueelcampodeldocumentopuedecontenervarios
valores,oseaestecampopuederecibirun“arreglo”de
valores.
<dynamicField name=“*_ss”
type="string"
indexed=“true"
stored="true"
multivalued="true" />
Camposdinámicos
Noesnecesarioespecificarelnombredelcampo,sinoun
“patrón”deesteaceptacualquiercampoquecumplacon
dichopatró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
mismotipo.
CopyFields
Con 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" />
¡Buscarenamboscampos!
<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” />
definirunnuevocampo
copiardelosotroscampos
haciaelnuevo
Análisisdeltexto
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>
tokenizador
filtros
Procesodeanálisis
Texto inicial
Tokenizer
Filters
Filters
token token token token
token token token
token token token token
token token token
produceunstream
detokensapartirdel
textoinicial
filtrosaplican
operaciones
sobrelos
tokens
TokenizadoresdeSolr
• 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).
FiltersdeSolr
• 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).
FiltersdeSolr
• ASCIIFoldingFilterFactory:
Lleva los tokens a su representación
ASCII.
• PatternReplaceFilterFactory:
Utilizar expresiones regulares para
reemplazar secuencias de caracteres.
Ejemplo
Este 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
tokensqueson
finalmente
indexados
primer tweet
uci universidad
prim
univer
PorterStemFilterFactory
raízesdelostérminos
Páginadeaná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>
diferentesanalizadoresendiferentesetapas
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>
PONIENDOLOTODOJUNTO

Conferencia 2: El esquema