/** * Transforms a generic Query object into an Elastic Search query DSL * * @param Query $query */ public function mapQuery(Query $query) { $arguments = array(); $map = new Boolean(); if ($query->hasQueryString()) { Lucene::setDefaultSearchField($query->getQueryString()->getDefaultField()); QueryParser::setDefaultOperator($query->getQueryString()->getDefaultOperator() == Query::OPERATOR_AND ? QueryParser::B_AND : QueryParser::B_OR); $keyword = $query->getQueryString()->getQuery(); if ("*" === $keyword) { $subQuery = new Wildcard(new Term($keyword)); $subQuery->setMinPrefixLength(0); } else { $subQuery = QueryParser::parse($keyword); } $map->addSubquery($subQuery, true); } $arguments[] = $map; foreach ($query->getSort() as $sort) { $arguments[] = key($sort); $arguments[] = SORT_REGULAR; $arguments[] = current($sort) == 'asc' ? SORT_ASC : SORT_DESC; } return $arguments; }
public function testDefaultSearchField() { $currentDefaultSearchField = Lucene\Lucene::getDefaultSearchField(); $this->assertEquals($currentDefaultSearchField, null); Lucene\Lucene::setDefaultSearchField('anotherField'); $this->assertEquals(Lucene\Lucene::getDefaultSearchField(), 'anotherField'); Lucene\Lucene::setDefaultSearchField($currentDefaultSearchField); }
public function testQueryHit() { // Restore default search field if it wasn't done by previous test because of failure Lucene\Lucene::setDefaultSearchField(null); $index = Lucene\Lucene::open(dirname(__FILE__) . '/_index23Sample/_files'); $hits = $index->find('submitting AND wishlists'); $hit = $hits[0]; $this->assertTrue($hit instanceof Search\QueryHit); $this->assertTrue($hit->getIndex() instanceof Lucene\IndexInterface); $doc = $hit->getDocument(); $this->assertTrue($doc instanceof Document\Document); $this->assertEquals($doc->path, 'IndexSource/contributing.html'); }