Domanda

Vorrei implementare una ricerca avanzata per il mio progetto. La ricerca ora utilizza tutte le stringhe immesse dall'utente e fa una grande disconnessione con i criteri API.

Funziona bene, ma ora vorrei implementare più funzioni: AND, OR e parentesi ()

Ho avuto difficoltà ad analizzare la stringa e a costruire criteri dalla stringa. Ho trovato questa domanda Stackoverflow , ma non ha aiutato davvero (non ha fatto chiarire ciò che voleva).

Ho trovato un altro articolo , ma questo supporta molto di più e sputa le istruzioni sql. Un'altra cosa di cui ho sentito parlare molto è Lucene, ma non sono sicuro che questo mi aiuterebbe davvero.


Ho cercato un po 'in giro e ho trovato Lucene.Net WhitespaceAnalyzer e QueryParser.

Cambia la ricerca A AND B OR C in qualcosa come + A + B C, che è un buon passo nella direzione corretta (più gestisce le parentesi). Il prossimo passo sarebbe quello di ottenere la stringa convertita in un insieme di congiunzioni e disgiunzioni.

Il L'esempio Java che ho trovato stava usando il generatore di query che non riuscivo a trovare in NHibernate.

Altre idee?

È stato utile?

Soluzione 2

Quello che sto praticamente facendo in questo momento è analizzare la stringa di input con l'API di analisi Lucene.Net. Questo mi dà una sintassi uniforme e semplificata. (Pseudocodice)

using Lucene.Net.Analysis;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.QueryParsers;
using Lucene.Net.Search;

void Function Search (string queryString)
{
    Analyzer analyzer = new WhitespaceAnalyzer();
    QueryParser luceneParser = new QueryParser("name", analyzer);
    Query luceneQuery = luceneParser.Parse(queryString);
    string[] words = luceneQuery.ToString().Split(' ');

    foreach (string word in words)
    {
        //Parsing the lucene.net string
    }
}

Dopo di che sto analizzando questa stringa manualmente, creando disgiunzioni e congiunzioni.

scroll top