Ich bin auf der Suche nach einer Java/Scala-Bibliothek, die eine Benutzerabfrage und einen Text nehmen und zurückgeben kann, wenn es eine Übereinstimmung gab oder nicht.Wie funktioniert die Java String-Übereinstimmung mit der booleschen Suchsyntax?
Ich verarbeite einen Strom von Informationen, zB: Twitter Stream, und kann es mir nicht leisten, einen Batch-Prozess zu verwenden, muss ich jeden Tweet in Echtzeit bewerten, anstatt es durch Lucene RAMDisk indizieren und später abfragen.
Es ist möglich, einen Parser/Lexer mit ANTLR zu erstellen, aber das ist so gebräuchlich, dass ich nicht glauben kann, dass niemand zuvor eine Lib erstellt hat.
Einige Proben von TextQuery Ruby library das genau das tut, was ich brauche:
TextQuery.new("'to be' OR NOT 'to_be'").match?("to be") # => true
TextQuery.new("-test").match?("some string of text") # => true
TextQuery.new("NOT test").match?("some string of text") # => true
TextQuery.new("a AND b").match?("b a") # => true
TextQuery.new("a AND b").match?("a c") # => false
q = TextQuery.new("a AND (b AND NOT (c OR d))")
q.match?("d a b") # => false
q.match?("b") # => false
q.match?("a b cdefg") # => true
TextQuery.new("a~").match?("adf") # => true
TextQuery.new("~a").match?("dfa") # => true
TextQuery.new("~a~").match?("daf") # => true
TextQuery.new("2~a~1").match?("edaf") # => true
TextQuery.new("2~a~2").match?("edaf") # => false
TextQuery.new("a", :ignorecase => true).match?("A b cD") # => true
Sobald es in Ruby implementiert wurde für meine Plattform ist es nicht geeignet, auch JRuby Ich kann nicht nur für diesen Punkt auf unserer Lösung verwenden:
fand ich eine ähnliche Frage, aber nicht Antwort von ihm bekommen konnte: Boolean Query/Expression to a Concrete syntax tree
Dank!
@edgarespina gerade erzählte mir über [Parboiled] (https://github.com/sirthias/parboiled/) es scheint sehr ähnlich mit Treetop für Ruby. Vielleicht ist das die einfachste Lösung. – arjones