Frage

Ich möchte eine erweiterte Suche für mein Projekt implementieren. Die Suche jetzt nutzt alle Saiten der Benutzer eingibt und macht eine große disjunction mit Kriterien API.

Das funktioniert gut, aber jetzt würde Ich mag mehr Funktionen implementieren: AND, OR und Klammern ()

Ich habe eine harte Zeit Parsen die Zeichenfolge bekommt - und Gebäude Kriterien aus dem String. Ich habe festgestellt diese Frage Stackoverflow , aber es hat nicht wirklich helfen (er nicht machen klar, was er wollte).

fand ich eine andere Artikel , aber das unterstützt viel mehr und sQL-Anweisungen ausspuckt. Eine andere Sache, die ich gehört habe viel erwähnen ist Lucene -. Aber ich bin nicht sicher, ob das wirklich mir helfen würde,


Ich habe um ein wenig gesucht und ich habe die Lucene.Net WhitespaceAnalyzer und die QueryParser gefunden.

Es ändert die Suche A und B oder C in so etwas wie + A + B C, das ein guter Schritt in die richtige Richtung ist (plus es Griffe Klammern). Der nächste Schritt wäre die konvertierte Zeichenkette in einen Satz von Konjunktionen und Disjunktionen zu erhalten.

Die Java Beispiel, das ich gefunden die Query Builder wurde mit dem ich nicht in NHibernate finden konnte.

Jede weitere Ideen?

War es hilfreich?

Lösung 2

Was ich im Grunde jetzt tue ist Parsen der Eingabezeichenfolge mit dem Lucene.Net Parse-API. Das gibt mir eine einheitliche und vereinfachte Syntax. (Pseudocode)

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
    }
}

Danach habe ich diese Zeichenfolge manuell bin Parsen, die Disjunktionen und Konjunktionen zu schaffen.

Andere Tipps

Erraten Sie nicht über Nhibernate Suchen bis jetzt

Nhibernate Search verwendet lucene unten und gibt u alle Möglichkeiten der Verwendung von AND, OR, Grammatik.
Alles, was Sie tun müssen, ist Ihre Entitäten für die Indizierung Attribut und Nhibernate wird es an einer vordefinierten Stelle Index.
Das nächste Mal können Sie diesen Index mit der Kraft suchen, die Exposes Lucene und dann Domäne-Ebene Entitätsobjekten im Gegenzug erhalten.

using (IFullTextSession s = Search.CreateFullTextSession(sf.OpenSession(new SearchInterceptor()))) {

        QueryParser qp = new QueryParser("id", new StopAnalyzer());

        IQuery NHQuery = s.CreateFullTextQuery(qp.Parse("Summary:series"), typeof(Book));

        IList result = NHQuery.List();

Powerful, nicht wahr?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top