Author: rooneg
Date: Mon Mar 7 19:11:44 2005
New Revision: 156486
URL: http://svn.apache.org/viewcvs?view=rev&rev=156486
Log:
Extend the query parser so that it handles +term and -term. Now that
we have that support change the default occur for 'lcn search' to must,
since that's what Java Lucene does.
* src/query_parser/parser.c
(check_occur): new helper function.
(lcn_query_parser_parse): handle +term and -term.
* src/cmdline/main.c
(lcn_search_cmd): s/LCN_MUST/LCN_SHOULD/
Modified:
incubator/lucene4c/trunk/src/cmdline/main.c
incubator/lucene4c/trunk/src/query_parser/parser.c
Modified: incubator/lucene4c/trunk/src/cmdline/main.c
URL:
http://svn.apache.org/viewcvs/incubator/lucene4c/trunk/src/cmdline/main.c?view=diff&r1=156485&r2=156486
==============================================================================
--- incubator/lucene4c/trunk/src/cmdline/main.c (original)
+++ incubator/lucene4c/trunk/src/cmdline/main.c Mon Mar 7 19:11:44 2005
@@ -188,7 +188,7 @@
LCN_ERR (lcn_query_parser_create (&parser,
lcn_str_from_cstring ("contents",
pool),
- LCN_MUST,
+ LCN_SHOULD,
pool));
LCN_ERR (lcn_query_parser_parse (&query,
Modified: incubator/lucene4c/trunk/src/query_parser/parser.c
URL:
http://svn.apache.org/viewcvs/incubator/lucene4c/trunk/src/query_parser/parser.c?view=diff&r1=156485&r2=156486
==============================================================================
--- incubator/lucene4c/trunk/src/query_parser/parser.c (original)
+++ incubator/lucene4c/trunk/src/query_parser/parser.c Mon Mar 7 19:11:44 2005
@@ -39,6 +39,29 @@
return LCN_NO_ERROR;
}
+lcn_boolean_clause_occur_t
+check_occur (lcn_char_t **str, lcn_boolean_clause_occur_t default_occur)
+{
+ lcn_char_t *s = *str;
+
+ switch (s[0])
+ {
+ case '+':
+ *str = ++s;
+ printf ("must\n");
+ return LCN_MUST;
+
+ case '-':
+ *str = ++s;
+ printf ("must not\n");
+ return LCN_MUST_NOT;
+
+ default:
+ printf ("should\n");
+ return default_occur;
+ }
+}
+
lcn_error_t *
lcn_query_parser_parse (lcn_query_t **query,
lcn_query_parser_t *parser,
@@ -105,14 +128,22 @@
break;
case 1:
- LCN_ERR (lcn_term_query_create (query,
- lcn_term_create (APR_ARRAY_IDX
- (terms,
- 0,
- lcn_char_t *),
- parser->default_field,
- pool),
- pool));
+ {
+ lcn_char_t *str = APR_ARRAY_IDX (terms, 0, lcn_char_t *);
+
+ if (str[0] == '+')
+ ++str;
+ else if (str[0] == '-')
+ return lcn_error_create
+ (APR_EINVAL,
+ NULL,
+ "can't have a query with just a single negative term");
+
+ LCN_ERR (lcn_term_query_create
+ (query,
+ lcn_term_create (str, parser->default_field, pool),
+ pool));
+ }
break;
default:
@@ -123,20 +154,18 @@
for (idx = 0; idx < terms->nelts; ++idx)
{
+ lcn_char_t *str = APR_ARRAY_IDX (terms, idx, lcn_char_t *);
lcn_query_t *tq;
-
+
+ lcn_boolean_clause_occur_t occur
+ = check_occur (&str, parser->default_occur);
+
LCN_ERR (lcn_term_query_create
- (&tq,
- lcn_term_create (APR_ARRAY_IDX (terms,
- idx,
- lcn_char_t *),
- parser->default_field,
- pool),
- pool));
-
- LCN_ERR (lcn_boolean_query_add (*query,
- tq,
- parser->default_occur));
+ (&tq,
+ lcn_term_create (str, parser->default_field, pool),
+ pool));
+
+ LCN_ERR (lcn_boolean_query_add (*query, tq, occur));
}
break;
}