2017-05-03 2 views
0

Je reçois l'erreur lorsque le texte de recherche contient 'AND' à la fin de la phrase.Rencontré "<EOF>" Lucene.net 3.0.3 Erreur QueryParser

searchQuery: "Texte et"

private static Query parseQuery(string searchQuery, QueryParser parser) 
    { 
     Query query; 
     try 
     { 
     query = parser.Parse(searchQuery.Trim()); 
     } 
     catch (ParseException e) 
     { 
     query = parser.Parse(QueryParser.Escape(searchQuery.Trim())); 
     } 
     return query; 
    } 

Répondre

0

Mis à jour il couvre mon tout scénario.

Mon problème est résolu. Lorsque je reçois l'exception, je remplace la requête de recherche par des lettres minuscules.

searchQuery:"Text AND" 

après son remplacement par lettre minuscule, il ressemblera à ceci:

searchQuery:"text and" 

Il fonctionne dans mon cas et couvrir tous mes scénarios.

private static Query parseQuery(string searchQuery, QueryParser parser) 
{ 
    Query query; 
    try 
    { 
     query = parser.Parse(searchQuery); 
    } 
    catch (ParseException e) 
    { 
     query = null; 
    } 
    if (query == null) 
    { 
     string replacedQuery; 
     cooked = Regex.Replace(searchQuery, @"\B[A-Z]", m => "" + m.ToString().ToLower()); 
     cooked = Regex.Replace(cooked, "[^a-zA-Z0-9]+", " "); 
     query = parser.Parse(replacedQuery); 
    } 
    return query; 
} 

Maintenant, cette solution fonctionne pour le type de requêtes ci-dessous:

  • "Texte +"
  • "Text =" Note: un caractère spécial à la fin de la chaîne.
  • "Texte ET" Remarque: N'importe quel opérateur booléen à la fin de la chaîne.
  • "Texte et données"

    Note: restante syntaxe des requêtes fonctionnent comme lucene.net fournir la syntaxe de la requête (par exemple la syntaxe de la phrase, Opérateurs booléens Syntaxe, requête Wildcard)

+0

C'est pas une solution. Que faire si @searchQuery = "Text +"? Votre gestion de regex va lancer une autre ParseException. Si vous avez le contrôle sur la construction de la requête, le correctif est là; sinon, l'erreur doit être renvoyée à l'appelant. – RamblinRose

+0

@RamblinRose tout exemple conduit à la solution s'il vous plaît donner une réponse ci-dessous. Merci à l'avance –

+0

Vous pouvez également utiliser [QueryParser.Escape] (https://lucenenet.apache.org/docs/3.0.3/da/d66/class_lucene_1_1_net_1_1_query_parsers_1_1_query_parser.html#a648ae6a6b1d598c0a799e3654c67e513) ainsi, et oui qui en prend soin . Je suis un genre curieux et mon expérience m'incite à demander: où est le "AND" originaire? Êtes-vous l'indexation "et"? – RamblinRose