java - query - elasticsearch wildcard search
elasticsearch-Devuelve las fichas de un campo (2)
Si te refieres a los tokens que se han indexado, puedes hacer una faceta de términos en el campo del mensaje. Aumente el valor del size
para recuperar más entradas, o establezca en 0
para obtener todos los términos.
Lucene proporciona la capacidad de almacenar el término vectores, pero hasta ahora no hay manera de tener acceso a él con elasticsearch (que yo sepa).
¿Por qué necesitas eso? Si solo quiere comprobar lo que está indexando, puede echar un vistazo a la API de análisis .
¿Cómo puedo tener los tokens de un campo particular devueltos en el resultado?
Por ejemplo, una solicitud GET
curl -XGET ''http://localhost:9200/twitter/tweet/1''
devoluciones
{
"_index" : "twitter",
"_type" : "tweet",
"_id" : "1",
"_source" : {
"user" : "kimchy",
"postDate" : "2009-11-15T14:12:12",
"message" : "trying out Elastic Search"
}
}
Me gustaría tener los tokens del campo ''_source.message'' incluidos en el resultado
También hay otra forma de hacerlo usando el siguiente script script_fields:
curl ''http://localhost:9200/test-idx/_search?pretty=true'' -d ''{
"query" : {
"match_all" : { }
},
"script_fields": {
"terms" : {
"script": "doc[field].values",
"params": {
"field": "message"
}
}
}
}''
Es importante tener en cuenta que si bien esta secuencia de comandos devuelve los términos reales que se indexaron, también almacena en caché todos los valores de campo y en los índices grandes se puede usar mucha memoria. Por lo tanto, en índices grandes, podría ser más útil recuperar los valores de campo de los campos almacenados o la fuente y repetirlos de nuevo sobre la marcha utilizando el siguiente script MVEL:
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import java.io.StringReader;
// Cache analyzer for further use
cachedAnalyzer=(isdef cachedAnalyzer)?cachedAnalyzer:doc.mapperService().documentMapper(doc._type.value).mappers().indexAnalyzer();
terms=[];
// Get value from Fields Lookup
//val=_fields[field].values;
// Get value from Source Lookup
val=_source[field];
if(val != null) {
tokenStream=cachedAnalyzer.tokenStream(field, new StringReader(val));
CharTermAttribute termAttribute = tokenStream.addAttribute(CharTermAttribute);
while(tokenStream.incrementToken()) {
terms.add(termAttribute.toString())
};
tokenStream.close();
}
terms
Este script MVEL puede almacenarse como config/scripts/analyze.mvel
y usarse con la siguiente consulta:
curl ''http://localhost:9200/test-idx/_search?pretty=true'' -d ''{
"query" : {
"match_all" : { }
},
"script_fields": {
"terms" : {
"script": "analyze",
"params": {
"field": "message"
}
}
}
}''