From ed0affa92112a615f687dd00fd20ff59ea455571 Mon Sep 17 00:00:00 2001 From: Mathieu Darse Date: Thu, 27 Aug 2015 17:35:34 +0200 Subject: [PATCH] buildConceptQueriesForFields() replaces buildConceptQueries() --- .../Elastic/AST/AbstractTermNode.php | 27 +------------------ .../SearchEngine/Elastic/AST/TermNode.php | 24 ++++++++++++----- .../SearchEngine/Elastic/AST/TextNode.php | 2 +- .../Phrasea/SearchEngine/AST/TermNodeTest.php | 8 +----- 4 files changed, 20 insertions(+), 41 deletions(-) diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/AbstractTermNode.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/AbstractTermNode.php index 91201e1668..1586c78cdd 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/AbstractTermNode.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/AbstractTermNode.php @@ -35,32 +35,7 @@ abstract class AbstractTermNode extends Node implements TermInterface return $this->pruned_concepts; } - protected function buildConceptQueries(QueryContext $context) - { - if (!$this->getPrunedConcepts()) { - return []; - } - - $query_builder = function (array $fields) { - $concept_queries = $this->buildConceptQueriesForFields($fields); - $query = null; - foreach ($concept_queries as $concept_query) { - $query = QueryHelper::applyBooleanClause($query, 'should', $concept_query); - } - return $query; - }; - - $queries = $this->buildConceptQueriesForFields($context->getUnrestrictedFields()); - - $private_fields = $context->getPrivateFields(); - foreach (QueryHelper::wrapPrivateFieldQueries($private_fields, $query_builder) as $private_field_query) { - $queries[] = $private_field_query; - } - - return $queries; - } - - protected function buildConceptQueriesForFields(array $fields) + protected function buildConceptQueries(array $fields) { $concepts = $this->getPrunedConcepts(); if (!$concepts) { diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/TermNode.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/TermNode.php index 8e0d8be531..8066fa756c 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/TermNode.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/TermNode.php @@ -3,19 +3,29 @@ namespace Alchemy\Phrasea\SearchEngine\Elastic\AST; use Alchemy\Phrasea\SearchEngine\Elastic\Search\QueryContext; +use Alchemy\Phrasea\SearchEngine\Elastic\Search\QueryHelper; use Alchemy\Phrasea\SearchEngine\Elastic\Thesaurus\Term; class TermNode extends AbstractTermNode { public function buildQuery(QueryContext $context) { - // Should not match anything if no concept is defined - // TODO Ensure no match when no concept queries are provided - return [ - 'bool' => [ - 'should' => $this->buildConceptQueries($context) - ] - ]; + $query_builder = function (array $fields) { + $concept_queries = $this->buildConceptQueries($fields); + $query = null; + foreach ($concept_queries as $concept_query) { + $query = QueryHelper::applyBooleanClause($query, 'should', $concept_query); + } + return $query; + }; + + $query = $query_builder($context->getUnrestrictedFields()); + $private_fields = $context->getPrivateFields(); + foreach (QueryHelper::wrapPrivateFieldQueries($private_fields, $query_builder) as $concept_query) { + $query = QueryHelper::applyBooleanClause($query, 'should', $concept_query); + } + + return $query; } public function __toString() diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/TextNode.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/TextNode.php index c6a4db9394..2506a9ddf1 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/TextNode.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/TextNode.php @@ -58,7 +58,7 @@ class TextNode extends AbstractTermNode implements ContextAbleInterface ] ]; // Thesaurus - $concept_queries = $this->buildConceptQueriesForFields($fields); + $concept_queries = $this->buildConceptQueries($fields); foreach ($concept_queries as $concept_query) { $query = QueryHelper::applyBooleanClause($query, 'should', $concept_query); } diff --git a/tests/Alchemy/Tests/Phrasea/SearchEngine/AST/TermNodeTest.php b/tests/Alchemy/Tests/Phrasea/SearchEngine/AST/TermNodeTest.php index 77df623f0b..fd57990a77 100644 --- a/tests/Alchemy/Tests/Phrasea/SearchEngine/AST/TermNodeTest.php +++ b/tests/Alchemy/Tests/Phrasea/SearchEngine/AST/TermNodeTest.php @@ -76,13 +76,7 @@ class TermNodeTest extends \PHPUnit_Framework_TestCase $node = new TermNode('bar'); $query = $node->buildQuery($query_context->reveal()); - $expected = '{ - "bool": { - "should": [] - } - }'; - - $this->assertEquals(json_decode($expected, true), $query); + $this->assertNull($query); } public function testQueryBuildWithPrivateFields()