Tengo una configuración de ElasticSearch, recibiendo datos para indexar a través de un río CouchDB. Tengo el problema de que la mayoría de los campos en los documentos de CouchDB no son relevantes para la búsqueda: son campos usados internamente por la aplicación (IDs, etc.) y no quiero obtener falsos positivos debido a estos campos. Además, la indexación de datos no necesarios me parece un desperdicio de recursos.ElasticSearch: Indexe solo los campos especificados en la asignación
Para resolver este problema, he definido una asignación en la que especifico los campos que deseo indexar. Estoy usando pyes para acceder a ElasticSearch. El proceso que sigo es:
- Crea el río CouchDB, asociado a un índice. Esto aparentemente crea también el índice y crea un mapeo "couchdb" en ese índice que, hasta donde puedo ver, incluye todos los campos, con tipos asignados dinámicamente.
- Ponga una asignación, vuelva a restringirla a los campos que realmente quiero indexar.
Ésta es la definición del índice tal como se obtiene por:
curl -XGET http://localhost:9200/notes_index/_mapping?pretty=true
{
"notes_index" : {
"default_mapping" : {
"properties" : {
"note_text" : {
"type" : "string"
}
}
},
"couchdb" : {
"properties" : {
"_rev" : {
"type" : "string"
},
"created_at_date" : {
"format" : "dateOptionalTime",
"type" : "date"
},
"note_text" : {
"type" : "string"
},
"organization_id" : {
"type" : "long"
},
"user_id" : {
"type" : "long"
},
"created_at_time" : {
"type" : "long"
}
}
}
}
}
El problema que tengo es manyfold:
- que el "couchdb" mapeo por defecto está indexando todos los campos. No quiero esto. ¿Es posible evitar la creación de ese mapeo? Estoy confundido, porque ese mapeo parece ser el que de alguna manera se está "conectando" al río CouchDB.
- la asignación que se crea parece no tener ningún efecto: no hay documentos indexados por que la cartografía
¿Tiene algún consejo sobre esto?
EDITAR
Esto es lo que estoy haciendo en realidad, exactamente como se ha escrito:
server="localhost"
# Create the index
curl -XPUT "$server:9200/index1"
# Create the mapping
curl -XPUT "$server:9200/index1/mapping1/_mapping" -d '
{
"type1" : {
"properties" : {
"note_text" : {"type" : "string", "store" : "no"}
}
}
}
'
# Configure the river
curl -XPUT "$server:9200/_river/river1/_meta" -d '{
"type" : "couchdb",
"couchdb" : {
"host" : "localhost",
"port" : 5984,
"user" : "admin",
"password" : "admin",
"db" : "notes"
},
"index" : {
"index" : "index1",
"type" : "type1"
}
}'
Los documentos en index1 todavía contienen campos que no sean "note_text", que es el única que yo han mencionado específicamente en la definición del mapeo. ¿Porqué es eso?
Gracias por su comentario, pero algo no está claro. ¿Dónde hago uso de mi mapeo (lo llamé 'default_mapping') en esa solicitud PUT? – dangonfast
Tiene un mapeo por índice, pero puede tener múltiples 'tipos' declarados en cada mapeo. No estaba seguro de qué tipo de mapeo pretendía usar; tiene dos de ellos: 'couchdb' y' default_mapping'. Simplemente cambie el valor de la tecla 'tipo' en la configuración del río. –
He editado la pregunta original, mostrando ahora las solicitudes POST reales que estoy haciendo para configurar ES. Esto todavía no funciona: todos los campos todavía están indexados. – dangonfast