Recherche avec regexp sur une string composé de chiffre


(Olivier Bremaud) #1

Bonjour,
J'ai un soucis pour faire une recherche full-text sur des chaînes de caractères composés de chiffre, avec une regex à la fin.

Par exemple pour DOS0036643 je voudrais que ça match aussi pour DOS00366438 ou DOS00366439

J'ai fait pas mal de test avec par exemple regexp et aussi wildcard pare exemple :

{
    "query": {
        "regexp": {
            "content" : "DOS0036643.*"
        }
    },
    "highlight": {
 		"fields": {
 			"content": {"fragment_size": 560}
 			}   
    } 		
}

J'ai essayé de tourner ma regex dans un peu tous les sens, sans jamais parvenir au résultat souhaité. J'ai réussi avec des chaines de caractères mais, dés que ma chaîne est composé de chiffre plus rien ne fonctionne...

Merci d'avance


(David Pilato) #2

Quel analyzer utilises-tu pour ce champ?


(Olivier Bremaud) #3

C'est fs crawler qui index mes données (D'ailleurs un grand merci à toi), j'ai laissé le mapping par défaut.


(David Pilato) #4

Donc tu dois utiliser l'analyseur par défaut qui doit générer des tokens du genre DOS, 0036643. Du coup, quand tu compares avec DOS0036643.*, ni l'un ni l'autre ne matche.

Pour mieux comprendre, utilise l'API _analyze pour voir comment ton texte d'origine est en fait indexé.


(Olivier Bremaud) #5
    POST testallwiki/_analyze
    {
      "tokenizer" : "standard",
      "text" :"DOS0036643 - CPOST - Réouvert ============================================================= \r\n \r\nContexte : 
\r\nOuvert le : 23/02/2016 14:38:42\r\nPour le : 04/03/2016 14:38:42\r\nClient : = - Madame 
\r\n(11112832)\r\nDossier client :\r\n \r\nDescription :\r\nUn sociétaire avait demandé les avis d'échéance par mail, or il les reçoit \r\ntoujours par courrier et non par mail. Après vérification, lorsque l'on \r\nfait une CPERS et CACTP on voie bien que s'est paramétré pour l'envoi par \r\nmail. En revanche sur une CPOST l'avis d'échéence électronique n'est pas \r\nactivée.\r\nN° soc : \r\nCB :  Le sociétaire  a souscrit à l'avis d'échéance électronique 
    seulement le 2 février 2016 à 16 h 10 : 34.\r\nOr, le calcul du quittancement (Chaîne NP19) a 
    été effectué le 29 janvier 2016.\r\nL'indicateur \"abonné AEE\" de la CPOST est renseigné lors du calcul du quittancement. \r\nA ce moment-là, le sociétaire n'ayant pas encore souscrit à 
    l'Avis d'Echéance Electronique, il est normal que cet indicateur soit à \"N\"  sur la CPOST du 
    sociétaire .\r\nDe plus, l'édition des avis d'échéance a été faite par la chaîne NPCX passée le 
    30 janvier 2016.\r\nLe sociétaire s'est donc inscrit trop tard à l'Avis d'Echéance Electronique 
    pour recevoir son avis d'échéance principal 2016 par voie électronique cette fois-ci. Cloturé de
     nouveau après reformulation.\r\n\r\n"

    }

J'ai fait cette requête le résultat est le suivant :

{
   "tokens": [
      {
         "token": "DOS0036643",
         "start_offset": 0,
         "end_offset": 10,
         "type": "<ALPHANUM>",
         "position": 0
      },
      {
         "token": "CPOST",
         "start_offset": 13,
         "end_offset": 18,
         "type": "<ALPHANUM>",
         "position": 1
      },
      {
         "token": "Réouvert",
         "start_offset": 21,
         "end_offset": 29,
         "type": "<ALPHANUM>",
         "position": 2
      },
.....

Je vais essayer de changer un peu mon mapping, faire plusieurs tests, Vu que j'index des MS documents penses-tu que mapper-attchments pourrait changer quelque choses ?

Ce que je trouve bizarre c'est que lorsque je fais une requête type :

{
    "query": {
        "regexp": {
            "content" : "olivi.*"
        }
    },
     			"highlight": {
 					"fields": {
 						"content": {"fragment_size": 560}
 					}
 				}	
} 

Le matche ce fait sur olivia ou olivier par exemple, mais lorsque mon token est composé de numérique cela ne marche plus.


(system) #6