elasticsearch - La búsqueda con comodines no funciona en Kibana
(4)
En una nota relacionada, pude obtener lowercase_expanded_terms en kibana trabajando con este cambio:
diff --git a/src/app/services/querySrv.js b/src/app/services/querySrv.js
index 72e5d8b..160285c 100644
--- a/src/app/services/querySrv.js
+++ b/src/app/services/querySrv.js
@@ -102,7 +102,7 @@ function (angular, _, config, kbn) {
.size(q.size)
.facetFilter(ejs.QueryFilter(
ejs.FilteredQuery(
- ejs.QueryStringQuery(q.query || ''*''),
+ ejs.QueryStringQuery(q.query || ''*'').lowercaseExpandedTerms(false),
filterSrv.getBoolFilter(filterSrv.ids())
)))).size(0);
@@ -206,7 +206,7 @@ function (angular, _, config, kbn) {
switch(q.type)
{
case ''lucene'':
- return ejs.QueryStringQuery(q.query || ''*'');
+ return ejs.QueryStringQuery(q.query || ''*'').lowercaseExpandedTerms(false);
case ''regex'':
return ejs.RegexpQuery(''_all'',q.query);
default:
@@ -281,4 +281,4 @@ function (angular, _, config, kbn) {
self.init();
});
Tengo un campo "Alerta" que contiene una cadena larga que contiene espacios, números y caracteres especiales. Tengo este campo configurado en "no_analizado". Al usar la consulta de comodines, puedo emitir una consulta de la siguiente manera y obtener los resultados que deseo.
POST /test-index-snort2/type-snort/_search
{
"query": {
"wildcard": {
"Alert": {
"value": "ET CNC*"
}
}
}
}
Me gustaría usar Kibana para implementar una búsqueda similar. Sin embargo, al hacerlo no se obtienen resultados. Mi consulta en Kibana aparece como sigue:
Alert:"ET CNC*"
Lo que a su vez crea una consulta de cadena de consulta así:
"query": {
"filtered": {
"query": {
"bool": {
"should": [
{
"query_string": {
"query": "Alert:/"ET CNC*/""
}
}
]
}
},
"filter": {
"bool": {
"must": [
{
"match_all": {}
}
]
}
}
}
¿Hay alguna forma de obtener los mismos resultados en Kibana a través de la consulta de cadena de consulta que hago con la consulta comodín?
Aquí está el mapeo para el campo de Alerta y una muestra de las entradas:
"Alert": {
"type": "string",
"index": "not_analyzed"
},
"Alert": "ET CNC Palevo Tracker Reported CnC Server TCP group 9 ",
"Alert": "ET CNC Palevo Tracker Reported CnC Server TCP group 10 ",
"Alert": "ET CNC Zeus Tracker Reported CnC Server TCP group 3 ",
Gracias a polyfractal over en #elasticsearch, tengo una respuesta. Por defecto, query_string hará una minúscula entrada de comodín. Esto se puede deshabilitar a través de la configuración de minúsculas_expanded_terms = false. Sin embargo, no hay manera de establecer esto en Kibana.
Polyfractal me recomendó crear un analizador para minúsculas en este contenido. Esto me permitirá utilizar la cadena de consulta con caracteres comodín con la limitación de que el valor del campo aparecerá en minúscula en los resultados de facetas, pero la fuente _source conservará el formato original. Para mí, esto funciona bien y es la solución con la que estoy avanzando.
Excepto de IRC:
<polyfractal> id set up the analyzer like this: tokenizer:keyword, filters: [lowercase]
<polyfractal> that''ll basically give you a lowercased `not_analyzed` field. may also want to disable norms, since you prolly dont need them either
No veo aquí la respuesta más simple, esta:
Si especifica Alert:"ET CNC*"
en la barra de búsqueda de Kibana, de hecho no devolverá ningún resultado,
PERO
Si elimina las comillas, la búsqueda con comodines también funcionará en el filtro lucen archivado. Ahora, por supuesto, en su caso, el espacio en la consulta de búsqueda es problemático, pero dado su conjunto de datos Alert: ET*CNC*
daría el mismo resultado.
Tratar
{"wildcard":{"Alert":"ET CNC*"}}
en la barra de búsqueda obtendrá el formato esperado en query_string.