Tokenizing cadena para sugerencia de finalización
quiere construir la funcionalidad de autocompletar de un sitio web de comercio electrónico, utilizando Completion Suggester.
Este es mi índice:
PUT myIndex
{
"mappings": {
"_doc" : {
"properties" : {
"suggest" : {
"type" : "completion"
},
"title" : {
"type": "keyword"
},
"category" : {
"type": "keyword"
},
"description" : {
"type": "keyword"
}
}
}
}
}
Ahora, cuando cargue el anuncio, quiero que el campo de título se use para autocompletar, así que así es como subo un documento:
POST dummy/_doc
{
"title": "Blue asics running shoes",
"category": "sports",
"description": "Nice blue running shoes, size 44 eu",
"suggest": {
"input": "Blue Asics running shoes" // <-- use title
}
}
Problema es, de esta manera, la búsqueda elástica solo coincide con la cadena desde el principio ... es decir, "Blu" encontrará el resultado pero "Asic" o "Ejecutar" o "Sho" no devolverán nada ...
Así que lo que tengo que hacer es tokenizar mi entrada de esta manera:
POST dummy/_doc
{
"title": "Blue asics running shoes",
"category": "sports",
"description": "Nice blue running shoes, size 44 eu",
"suggest": {
"input": ["Blue", "Asics", "running", "shoes"] // <-- tokenized title
}
}
Esto funcionaría bien ... Pero, ¿cómo se supone que tokenice mi campo? Sé que puedo dividir la cadena en c #, pero ¿hay alguna forma de que pueda hacer esto en Elasticsearch / Nest?