나는 사용자 쿼리와 텍스트를 취할 수있는 Java/Scala 라이브러리를 찾고 있는데, 일치하는 것이 있는지 없는지를 반환합니다.부울 검색 구문을 사용하여 Java 문자열 일치를 수행하는 방법?
트위터 스트림, 일괄 처리 프로세스를 사용할 여유가없는 정보 스트림을 처리 중이므로 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
이 루비에 구현되면 그것은 또한 내가 우리의 솔루션이 시점에 대한 JRuby를 사용할 수 없습니다, 내 플랫폼에 적합하지입니다 :
나는 비슷한 질문을 찾았지만 그것에서 답을 얻을 수 없었다 : Boolean Query/Expression to a Concrete syntax tree감사합니다!
@edgarespina가 [Parboiled] (https://github.com/sirthias/parboiled/)에 관해서 나에게 말한 것은 Treetop for Ruby와 매우 유사하게 보입니다. 어쩌면 그것이 가장 쉬운 해결책 일 것입니다. – arjones