ElasticSearch: ¿Podemos aplicar analizadores de n-gram y lenguaje durante la indexación?
Muchas gracias @Random, he modificado la asignación de la siguiente manera. Para probar he usado "película" como mi tipo para indexar. Nota: también he agregado search_analyzer. No estaba obteniendo los resultados adecuados sin eso. Sin embargo, tengo las siguientes dudas para usar search_analyzer.
1] ¿Podemos usar search_analyzer personalizado en el caso de analizadores de lenguaje?
2] ¿Estoy obteniendo todos los resultados debido al analizador de n-gramas que he usado y no al analizador de inglés?
{
"settings": {
"analysis": {
"analyzer": {
"english_ngram": {
"type": "custom",
"filter": [
"english_possessive_stemmer",
"lowercase",
"english_stop",
"english_stemmer",
"ngram_filter"
],
"tokenizer": "whitespace"
},
"search_analyzer":{
"type": "custom",
"tokenizer": "whitespace",
"filter": "lowercase"
}
},
"filter": {
"english_stop": {
"type": "stop"
},
"english_stemmer": {
"type": "stemmer",
"language": "english"
},
"english_possessive_stemmer": {
"type": "stemmer",
"language": "possessive_english"
},
"ngram_filter": {
"type": "ngram",
"min_gram": 1,
"max_gram": 25
}
}
}
},
"mappings": {
"movie": {
"properties": {
"title": {
"type": "string",
"fields": {
"en": {
"type": "string",
"analyzer": "english_ngram",
"search_analyzer": "search_analyzer"
}
}
}
}
}
}
}
Actualización:
El uso del analizador de búsqueda tampoco funciona de manera consistente y necesito más ayuda con esto. Actualizar la pregunta con mis hallazgos.
Utilicé la siguiente asignación como se sugirió (Nota: esta asignación no usa el analizador de búsqueda), por simplicidad, consideremos solo el analizador en inglés.
{
"settings": {
"analysis": {
"analyzer": {
"english_ngram": {
"type": "custom",
"filter": [
"english_possessive_stemmer",
"lowercase",
"english_stop",
"english_stemmer",
"ngram_filter"
],
"tokenizer": "standard"
}
},
"filter": {
"english_stop": {
"type": "stop"
},
"english_stemmer": {
"type": "stemmer",
"language": "english"
},
"english_possessive_stemmer": {
"type": "stemmer",
"language": "possessive_english"
},
"ngram_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 25
}
}
}
}
}
Índice creado:
PONERhttp: // localhost: 9200 / movies / movie / 1
{"title":"$peci@l movie"}
Intenté la siguiente consulta:
GET http://localhost:9200/movies/movie/_search
{
"query": {
"multi_match": {
"query": "$peci mov",
"fields": ["title"],
"operator": "and"
}
}
}
}
No obtuve resultados para esto, ¿estoy haciendo algo mal? Estoy tratando de obtener resultados para:
1] Special characters
2] Partial matches
3] Space separated partial and full words
Gracias de nuevo !