web-dev-qa-db-fra.com

La recherche générique ne fonctionne pas à Kibana

J'ai un champ "Alert" qui contient une longue chaîne contenant des espaces, des nombres et des caractères spéciaux. J'ai ce champ défini sur "not_analyzed". En utilisant la requête Wildcard, je peux émettre une requête comme suit et obtenir les résultats souhaités.

POST /test-index-snort2/type-snort/_search
{
  "query": {
    "wildcard": {
      "Alert": {
        "value": "ET CNC*"
      }
    }
  }
}

J'aimerais utiliser Kibana pour mettre en œuvre une recherche similaire. Cela ne renvoie toutefois aucun résultat. Ma requête à Kibana apparaît comme suit:

Alert:"ET CNC*"

Ce qui à son tour crée une requête query_string comme ceci:

"query": {
    "filtered": {
      "query": {
        "bool": {
          "should": [
            {
              "query_string": {
                "query": "Alert:\"ET CNC*\""
              }
            }
          ]
        }
      },
      "filter": {
        "bool": {
          "must": [
            {
              "match_all": {}
            }
          ]
        }
      }
    }

Existe-t-il un moyen d'obtenir les mêmes résultats dans Kibana via la requête query_string que je fais avec l'utilisation de la requête générique?

Voici le mappage pour le champ Alert et un échantillon des entrées:

"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 ",
15
Sgt B

Grâce à polyfractal dans #elasticsearch, j'ai une réponse. Par défaut, query_string introduira des caractères génériques minuscules. Cela peut être désactivé via le paramètre lowercase_expanded_terms = false. Cependant, il n'y a aucun moyen de régler cela à Kibana.

polyfractal m'a recommandé de créer un analyseur pour mettre ce contenu en minuscule. Cela me permettra d'utiliser la chaîne query_string avec des caractères génériques, avec la limitation que la valeur du champ apparaîtra en minuscule dans les résultats de facettes, mais que la source _ conservera le formatage original. Pour moi, cela fonctionne bien et c'est la solution avec laquelle je vais de l'avant.

Sauf d'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
15
Sgt B

Essayer

{"wildcard":{"Alert":"ET CNC*"}}

dans la barre de recherche ... vous obtiendrez le format attendu dans query_string.

10
Satish Chaluvaraj

Sur une note connexe, j'ai pu obtenir des minuscules_expanded_terms dans kibana en travaillant avec ce changement:

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();
   });
2
sunfinite

Je ne vois pas ici la réponse la plus simple, celle-ci:

Si vous spécifiez Alert:"ET CNC*" dans la barre de recherche de Kibana, aucun résultat ne sera renvoyé.

MAIS

Si vous supprimez les guillemets, la recherche par caractères génériques fonctionne également dans le filtre lucen . Maintenant, bien sûr, dans votre cas, l'espace dans la requête de recherche est problématique, mais si votre jeu de données Alert: ET*CNC* donne le même résultat.

0
Sobvan