[Xapian-discuss] QueryParser: aliases and OP_AND

Menard, Daniel Daniel.Menard at ehesp.fr
Tue Jan 19 15:35:59 GMT 2010


Hello,

I'm wondering about how the QueryParser parses a query containing an "alias" when the default operator is OP_AND
(by "alias", I mean a search field mapped to multiple term prefixes).

With the following php code :
<?php
$parser=new XapianQueryParser();
$parser->set_default_op(XapianQuery::OP_AND);
$parser->add_prefix('alias', 'AUT1:');
$parser->add_prefix('alias', 'AUT2:');
echo $parser->parse_query('alias:(john smith)')->get_description();
?>

I get:

Xapian::Query(((AUT1:john:(pos=1) OR AUT2:john:(pos=1)) AND (AUT1:smith:(pos=2) OR AUT2:smith:(pos=2))))
i.e. (AUT1:john OR AUT2:john) AND (AUT1:smith OR AUT2:smith)

I was expecting something like:

Xapian::Query(((AUT1:john:(pos=1) AND AUT1:smith:(pos=2)) OR (AUT2:john:(pos=1) AND AUT2:smith:(pos=2))))
i.e. (AUT1:john AND AUT1:smith) OR (AUT2:john AND AUT2:smith)

I think that I understand why I get the current result: "alias:(john smith)" is parsed as "alias:john AND alias:smith" and the alias is then expanded.

But for my application, it produces some "noise" because a record containing the following data :
"Aut1=john lennon, Aut2=will smith" will appear in the Mset.

So my questions: is the current QueryParser's behaviour the intended one? Is there anything I can do to get the result I expect?

Of course, the parsing is fine when default_op is OP_OR (as it is by default), but results are also "strange for me" if I try with OP_PHRASE:

Xapian::Query(((AUT1:john:(pos=1) PHRASE 2 AUT1:smith:(pos=2)) OR (AUT2:john:(pos=1) PHRASE 2 AUT1:smith:(pos=2)) OR (AUT2:john:(pos=1) PHRASE 2 AUT2:smith:(pos=2)) OR (AUT1:john:(pos=1) PHRASE 2 AUT2:smith:(pos=2))))

i.e :(AUT1:john PHRASE AUT1:smith) OR (AUT2:john PHRASE AUT1:smith) OR (AUT2:john PHRASE AUT2:smith) OR (AUT1:john PHRASE AUT2:smith)

Thanks,

--

Daniel Ménard



More information about the Xapian-discuss mailing list