From f1d6141766fd456903f50699ea1035135e86c7b1 Mon Sep 17 00:00:00 2001 From: Mathieu Darse Date: Tue, 3 Nov 2015 16:07:41 +0100 Subject: [PATCH] Implicit conjunction When a term is followed by or just before a key-value pair, so manually adding AND is not needed anymore. --- grammar/query.pp | 8 +++++--- .../Phrasea/SearchEngine/resources/queries.csv | 14 +++++++------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/grammar/query.pp b/grammar/query.pp index da9da96e4d..1e4db93952 100644 --- a/grammar/query.pp +++ b/grammar/query.pp @@ -60,10 +60,14 @@ secondary: ternary: quaternary() ( ::space:: ::and:: ::space:: primary() #and )? +quaternary: + group() #group + | key_value_pair() ( ::space:: primary() #and )? + | term() ( ::space:: key_value_pair() #and )? // Key value pairs & field level matchers (restricted to a single field) -quaternary: +key_value_pair: native_key() ::colon:: ::space::? value() #native_key_value | ::flag_prefix:: flag() ::colon:: ::space::? boolean() #flag_statement | ::field_prefix:: field() ::colon:: ::space::? term() #field_statement @@ -73,8 +77,6 @@ quaternary: | field() ::space::? ::lte:: ::space::? value() #less_than_or_equal_to | field() ::space::? ::gte:: ::space::? value() #greater_than_or_equal_to | field() ::space::? ::equal:: ::space::? value() #equal_to - | group() #group - | term() #flag: word_or_keyword()+ diff --git a/tests/Alchemy/Tests/Phrasea/SearchEngine/resources/queries.csv b/tests/Alchemy/Tests/Phrasea/SearchEngine/resources/queries.csv index 0f3dd530ae..b176aaa482 100644 --- a/tests/Alchemy/Tests/Phrasea/SearchEngine/resources/queries.csv +++ b/tests/Alchemy/Tests/Phrasea/SearchEngine/resources/queries.csv @@ -64,8 +64,8 @@ foo ≥ "2015/01/01"| foo:bar|( MATCHES ) foo:[bar]|( MATCHES ) foo:[bar (baz)]|( MATCHES ) -foo:bar baz|( MATCHES ) -foo bar:baz| +foo:bar baz|(( MATCHES ) AND ) +foo bar:baz|( AND ( MATCHES )) # Regular field with name colliding with a native key field.collection:foo|( MATCHES ) @@ -76,16 +76,16 @@ field.id:foo|( MATCHES ) # Matchers collection:foo| collection:foo AND bar|( AND ) -#collection:foo bar| +collection:foo bar|( AND ) database:foo| database:foo AND bar|( AND ) -#database:foo bar| +database:foo bar|( AND ) type:foo| type:foo AND bar|( AND ) -#type:foo bar| +type:foo bar|( AND ) id:90| id:90 AND foo|( AND ) -#id:90 foo| +id:90 foo|( AND ) recordid:90| # Flag matcher @@ -94,7 +94,7 @@ flag.foo:1| flag.foo:false| flag.foo:0| flag.true:true| -flag.foo bar:true| +flag.foo bar:true|( AND ( MATCHES )) true| # Matcher on unknown name --> fulltext