Je suis novice à ELK. Je souhaite rechercher des documents en fonction de l'ordre d'apparition des mots dans un champ. Par exemple,
Dans doc1, my_field: "MON exemple de barre de texte FOO"
Dans doc2, my_field: "MY BAR Word FOO EXAMPLE"
Je voudrais demander à Kibana des documents où "FOO" est suivi de "BAR" et non l’inverse. Donc, je voudrais que doc1 retourne dans ce cas et pas doc2. J'ai essayé d'utiliser la requête ci-dessous dans la recherche Kibana. Mais ça ne fonctionne pas. Cette requête ne produit même pas de résultats de recherche.
my_field.raw:/.*FOO.*BAR.*/
J'ai aussi essayé avec le champ analysé (juste my_field
), bien que je sache que cela ne devrait pas fonctionner. Et bien sûr, cela n'a produit aucun résultat non plus.
S'il vous plaît aidez-moi avec cette recherche regex. Pourquoi n'ai-je aucun résultat correspondant à cette requête?
Je ne sais pas pourquoi cette requête regex ne fonctionnerait pas, mais je crois que Kibana utilise la requête de chaîne de requête d'Elasticsearch documentée ici afin que vous puissiez par exemple faire une requête d'expression (documentée dans le lien) en mettant votre recherche entre guillemets doubles et il chercherait le mot "foo" suivi de "bar". Cela fonctionnerait mieux aussi puisque vous le feriez sur votre champ analysé (my_field) où il a marqué chaque mot pour effectuer des recherches rapides. Donc, vous cherchez à Kibana serait:
my_field: "FOO BAR"
Mettre à jour:
On dirait que c'est un caprice ennuyeux de Kibana (probablement pour des raisons de compatibilité en amont). Quoi qu'il en soit, cela ne correspond pas pour vous car vous effectuez une recherche dans un champ non analysé et apparemment, Kibana par défaut est en minuscule. Par conséquent, il ne correspond pas au "FOO" majuscule non analysé. Vous pouvez configurer cela dans les paramètres avancés de Kibana mentionnés ici , notamment en définissant l’option de configuration "lowercase_expanded_terms" sur false.
Le langage de requête standard de Kibana est basé sur Lucene syntaxe de requête .
Et l'analyseur par défaut va marquer le texte en différents mots: [MY, FOO, Word, BAR, EXEMPLE]
Au lieu d'utiliser la correspondance regex, vous pouvez essayer la chaîne de recherche suivante dans Kibana:
my_field: FOO AND my_field: BAR
Et si vos données "my_field" ressemblent à "MYFOOWORDBAREXAMPLE", ce qui ne peut pas être marqué, vous devez utiliser la chaîne de requête:
my_field: *FOO*BAR*