10 votes

Analyse ou non_analysé ou ...?

Nouveau sur ES donc peut-être une question stupide, mais j'essaie de rechercher en utilisant un joker, par exemple : "SOMECODE*" et "*SOMECODE"

Cela fonctionne bien, mais la valeur dans le document peut être "SOMECODE/FRED".
Le problème est que * correspondra à n'importe quoi (ce qui inclut rien).
*SOMECODE trouvera une correspondance avec SOMECODE/FRED.

J'ai essayé de rechercher */SOMECODE mais cela ne renvoie rien.
Je pense que la tokenisation du champ est le problème principal.
c'est-à-dire, / provoque la valeur en 2 mots.

J'ai essayé de définir la carte du champ sur not_analyzed, mais alors je ne peux pas du tout rechercher dessus.

Suis-je en train de faire une erreur ?

Merci

14voto

Zach Points 4033

En définissant not_analyzed, vous ne permettez que les correspondances exactes (par exemple, "SOMECODE/FRED" uniquement, en incluant la casse et les caractères spéciaux).

Je suppose que vous utilisez l'analyseur standard (c'est l'analyseur par défaut si vous n'en spécifiez pas un). Dans ce cas, Standard traitera les barres obliques comme un séparateur de jetons, et générera deux jetons [somecode] et [fred]:

$ curl -XGET 'localhost:9200/_analyze?analyzer=standard&pretty' -d 'SOMECODE/FRED'
{
    "tokens" : [ {
    "token" : "somecode",
    "start_offset" : 0,
    "end_offset" : 8,
    "type" : "",
    "position" : 1
  }, {
    "token" : "fred",
    "start_offset" : 9,
    "end_offset" : 13,
    "type" : "",
    "position" : 2
  } ]
}

Si vous ne souhaitez pas ce comportement, vous devez passer à un tokeniseur qui ne divise pas sur les caractères spéciaux. Cependant, je remettrais en question le cas d'utilisation pour cela. Généralement, vous voudrez diviser ce type de caractères.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X