我正在尋找一個Java/Scala庫,可以接受用戶查詢和文本,並在有匹配或不匹配的情況下返回。如何使用布爾搜索語法進行Java字符串匹配?
我正在處理信息流,即:Twitter Stream,並且無法使用批處理過程,因此我需要實時評估每條推文,而不是通過Lucene RAMDisk對其進行索引並稍後查詢。
這是可能的使用ANTLR創建一個解析器/詞法分析器,但這是常見的用法,我不相信沒有人創建一個lib之前。
從TextQuery Ruby library一些樣品所做的正是我所需要的:
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
一旦有人Ruby實現它不適合我的平臺,我也不能使用JRuby的只是對我們的解決了這一點:
我發現了一個類似的問題,但無法從它那裏得到答案: Boolean Query/Expression to a Concrete syntax tree
謝謝!
@edgarespina剛纔告訴我[Parboiled](https://github.com/sirthias/parboiled/),它與Ruby的Treetop非常相似。也許這是最簡單的解決方案。 – arjones 2012-04-08 04:30:42