The following test script was written to test what I found
as a possible
bug in query parser
#!/usr/bin/perl
use strict;
use Search::Xapian qw/:standard/;
my $QueryParser = new Search::Xapian::QueryParser();
$QueryParser->set_default_op(OP_AND);
$QueryParser->set_stemmer(new
Search::Xapian::Stem("english"));
$QueryParser->set_stemming_strategy(STEM_SOME);
print "this script is to test the LoveHate feature.
Notice that when
phrases are not surrounded by brackets, the -notallowed
translates
to a regular AND search rather than a AND_NOT as it
should benn";
print "right:
".$QueryParser->parse_query(qq{testing search
-notallowed},(FLAG_BOOLEAN | FLAG_PHRASE | FLAG_LOVEHATE
|
FLAG_WILDCARD))."n";
print "right:
".$QueryParser->parse_query(qq{("testing
phrase")
-notallowed},(FLAG_BOOLEAN | FLAG_PHRASE | FLAG_LOVEHATE
|
FLAG_WILDCARD))."n";
print "wrong:
".$QueryParser->parse_query(qq{"testing
phrase"
-notallowed},(FLAG_BOOLEAN | FLAG_PHRASE | FLAG_LOVEHATE
|
FLAG_WILDCARD))."n";
This is the output:
this script is to test the LoveHate feature. Notice that
when
phrases are not surrounded by brackets, the -notallowed
translates
to a regular AND search rather than a AND_NOT as it
should be
right: Xapian::Query(((Ztest:(pos=1) AND
Zsearch:(pos=2)) AND_NOT
Znotallow:(pos=3)))
right: Xapian::Query(((testing:(pos=1) PHRASE 2
phrase:(pos=2))
AND_NOT Znotallow:(pos=3)))
wrong: Xapian::Query(((testing:(pos=1) PHRASE 2
phrase:(pos=2)) AND
Znotallow:(pos=3)))
Notice that the third search has [AND Znotallow:(pos=3)]
rather than
[AND_NOT Znotallow:(pos=3)]
As you can see from the second, if forcing the phrase into
(), it
manages to parse the query properly, but it should have done
the same
without it.
Your thoughts?
Ron
_______________________________________________
Xapian-discuss mailing list
Xapian-discuss lists.xapian.org
http://lists.xapian.org/mailman/listinfo/xapian-discuss
a>
|