예제 #1
0
    /**
     * 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;
    }
예제 #2
0
파일: IndexTest.php 프로젝트: rikaix/zf2
 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);
 }
예제 #3
0
 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');
 }