| 1 | <?php
|
|---|
| 2 | require('xapian.php'); // adjust the path to xapian.php
|
|---|
| 3 |
|
|---|
| 4 | echo 'PHP version ', PHP_VERSION, ', Xapian version ', Xapian::version_string(), "\n\n";
|
|---|
| 5 |
|
|---|
| 6 | // Create a dummy in-memory database
|
|---|
| 7 | $db=Xapian::inmemory_open();
|
|---|
| 8 | $doc = new XapianDocument();
|
|---|
| 9 | echo 'Creating a new db containing one document with terms : ';
|
|---|
| 10 | foreach(array('xapian', 'tester','testable','user','query') as $term)
|
|---|
| 11 | {
|
|---|
| 12 | $doc->add_term(utf8_encode($term));
|
|---|
| 13 | echo $term, ', ';
|
|---|
| 14 | }
|
|---|
| 15 | echo "\n\n";
|
|---|
| 16 | $db->add_document($doc);
|
|---|
| 17 |
|
|---|
| 18 | // Setup QueryParser
|
|---|
| 19 | $queryParser = new XapianQueryParser();
|
|---|
| 20 | $flags = XapianQueryParser::FLAG_WILDCARD;
|
|---|
| 21 | $queryParser->set_database($db);
|
|---|
| 22 |
|
|---|
| 23 | // Tests
|
|---|
| 24 | if (Xapian::version_string() >= '1.2.0') // take OP_SYNONYM into account
|
|---|
| 25 | {
|
|---|
| 26 | $tests = array // 'query' => 'expected result'
|
|---|
| 27 | (
|
|---|
| 28 | 'test* xapian' => 'Xapian::Query(((testable:(pos=1) SYNONYM tester:(pos=1)) OR xapian:(pos=2)))',
|
|---|
| 29 | 'xapian test*' => 'Xapian::Query((xapian:(pos=1) OR (testable:(pos=2) SYNONYM tester:(pos=2))))',
|
|---|
| 30 |
|
|---|
| 31 | 'test* xapian user' => 'Xapian::Query(((testable:(pos=1) SYNONYM tester:(pos=1)) OR xapian:(pos=2) OR user:(pos=3)))',
|
|---|
| 32 | 'xapian user test*' => 'Xapian::Query((xapian:(pos=1) OR user:(pos=2) OR (testable:(pos=3) SYNONYM tester:(pos=3))))',
|
|---|
| 33 | 'xapian test* user' => 'Xapian::Query((xapian:(pos=1) OR (testable:(pos=2) SYNONYM tester:(pos=2)) OR user:(pos=3)))',
|
|---|
| 34 |
|
|---|
| 35 | 'xapian query test* user' => 'Xapian::Query((xapian:(pos=1) OR query:(pos=2) OR (testable:(pos=3) SYNONYM tester:(pos=3)) OR user:(pos=4)))',
|
|---|
| 36 | 'xapian que* test* user' => 'Xapian::Query((xapian:(pos=1) OR query:(pos=2) OR (testable:(pos=3) SYNONYM tester:(pos=3)) OR user:(pos=4)))',
|
|---|
| 37 |
|
|---|
| 38 | 'xapian que* user test*' => 'Xapian::Query((xapian:(pos=1) OR query:(pos=2) OR user:(pos=3) OR (testable:(pos=4) SYNONYM tester:(pos=4))))',
|
|---|
| 39 | );
|
|---|
| 40 | }
|
|---|
| 41 | else
|
|---|
| 42 | {
|
|---|
| 43 | $tests = array // 'query' => 'expected result'
|
|---|
| 44 | (
|
|---|
| 45 | 'test* xapian' => 'Xapian::Query((testable:(pos=1) OR tester:(pos=1) OR xapian:(pos=2)))',
|
|---|
| 46 | 'xapian test*' => 'Xapian::Query((xapian:(pos=1) OR testable:(pos=2) OR tester:(pos=2)))',
|
|---|
| 47 |
|
|---|
| 48 | 'test* xapian user' => 'Xapian::Query((testable:(pos=1) OR tester:(pos=1) OR xapian:(pos=2) OR user:(pos=3)))',
|
|---|
| 49 | 'xapian user test*' => 'Xapian::Query((xapian:(pos=1) OR user:(pos=2) OR testable:(pos=3) OR tester:(pos=3)))',
|
|---|
| 50 | 'xapian test* user' => 'Xapian::Query((xapian:(pos=1) OR testable:(pos=2) OR tester:(pos=2) OR user:(pos=3)))',
|
|---|
| 51 |
|
|---|
| 52 | 'xapian query test* user' => 'Xapian::Query((xapian:(pos=1) OR query:(pos=2) OR testable:(pos=3) OR tester:(pos=3) OR user:(pos=4)))',
|
|---|
| 53 | 'xapian que* test* user' => 'Xapian::Query((xapian:(pos=1) OR query:(pos=2) OR testable:(pos=3) OR tester:(pos=3) OR user:(pos=4)))',
|
|---|
| 54 |
|
|---|
| 55 | 'xapian que* user test*' => 'Xapian::Query((xapian:(pos=1) OR query:(pos=2) OR user:(pos=3) OR testable:(pos=4) OR tester:(pos=4)))',
|
|---|
| 56 | );
|
|---|
| 57 | }
|
|---|
| 58 |
|
|---|
| 59 | foreach($tests as $test=>$expected)
|
|---|
| 60 | {
|
|---|
| 61 | $query = $queryParser->parse_query(utf8_encode($test), $flags);
|
|---|
| 62 | echo 'query: ', $test, "\n";
|
|---|
| 63 | $result = $query->get_description();
|
|---|
| 64 | echo 'result: ', $result, "\n";
|
|---|
| 65 | if ($result === $expected)
|
|---|
| 66 | {
|
|---|
| 67 | echo "OK.\n";
|
|---|
| 68 | }
|
|---|
| 69 | else
|
|---|
| 70 | {
|
|---|
| 71 | echo 'expect: ', $expected, "\n";
|
|---|
| 72 | echo "FAILS.\n";
|
|---|
| 73 | }
|
|---|
| 74 | echo "\n";
|
|---|
| 75 | } |
|---|