PHRAS-842_search-logged-as-es_4.0

- fix : query is logged in a "user" form, before parsing
This commit is contained in:
Jean-Yves Gaulier
2016-09-22 15:16:36 +02:00
parent d934e04c80
commit 827e4fe255
8 changed files with 50 additions and 20 deletions

View File

@@ -58,7 +58,7 @@ class SearchController extends Controller
$result = $this->getSearchEngine()->query($query, $options); $result = $this->getSearchEngine()->query($query, $options);
$this->getUserManipulator()->logQuery($this->getAuthenticatedUser(), $result->getQuery()); $this->getUserManipulator()->logQuery($this->getAuthenticatedUser(), $result->getUserQuery());
foreach ($options->getDataboxes() as $databox) { foreach ($options->getDataboxes() as $databox) {
$colls = array_map(function (\collection $collection) { $colls = array_map(function (\collection $collection) {
@@ -68,7 +68,7 @@ class SearchController extends Controller
})); }));
$this->getSearchEngineLogger() $this->getSearchEngineLogger()
->log($databox, $result->getQuery(), $result->getTotal(), $colls); ->log($databox, $result->getUserQuery(), $result->getTotal(), $colls);
} }
$this->getSearchEngine()->clearCache(); $this->getSearchEngine()->clearCache();

View File

@@ -1486,7 +1486,7 @@ class V1Controller extends Controller
$search_result = $this->getSearchEngine()->query((string)$request->get('query'), $options); $search_result = $this->getSearchEngine()->query((string)$request->get('query'), $options);
$this->getUserManipulator()->logQuery($this->getAuthenticatedUser(), $search_result->getQuery()); $this->getUserManipulator()->logQuery($this->getAuthenticatedUser(), $search_result->getUserQuery());
foreach ($options->getDataboxes() as $databox) { foreach ($options->getDataboxes() as $databox) {
$colls = array_map(function (\collection $collection) { $colls = array_map(function (\collection $collection) {
@@ -1496,7 +1496,7 @@ class V1Controller extends Controller
})); }));
$this->getSearchEngineLogger() $this->getSearchEngineLogger()
->log($databox, $search_result->getQuery(), $search_result->getTotal(), $colls); ->log($databox, $search_result->getUserQuery(), $search_result->getTotal(), $colls);
} }
$this->getSearchEngine()->clearCache(); $this->getSearchEngine()->clearCache();

View File

@@ -75,7 +75,7 @@ class QueryController extends Controller
return $collection->get_databox()->get_sbas_id() == $databox->get_sbas_id(); return $collection->get_databox()->get_sbas_id() == $databox->get_sbas_id();
})); }));
$this->getSearchEngineLogger()->log($databox, $result->getQuery(), $result->getTotal(), $collections); $this->getSearchEngineLogger()->log($databox, $result->getUserQuery(), $result->getTotal(), $collections);
} }
$proposals = $firstPage ? $result->getProposals() : false; $proposals = $firstPage ? $result->getProposals() : false;
@@ -185,7 +185,7 @@ class QueryController extends Controller
$json['results'] = $this->render($template, ['results'=> $result]); $json['results'] = $this->render($template, ['results'=> $result]);
/** Debug */ /** Debug */
$json['parsed_query'] = $result->getQuery(); $json['parsed_query'] = $result->getEngineQuery();
/** End debug */ /** End debug */
$fieldLabels = [ $fieldLabels = [

View File

@@ -36,7 +36,7 @@ abstract class V1SearchTransformer extends TransformerAbstract
return $suggestion->toArray(); return $suggestion->toArray();
}, $result->getSuggestions()->toArray()), }, $result->getSuggestions()->toArray()),
'facets' => $result->getFacets(), 'facets' => $result->getFacets(),
'query' => $result->getQuery(), 'query' => $result->getEngineQuery(),
]; ];
} }

View File

@@ -314,6 +314,7 @@ class ElasticSearchEngine implements SearchEngineInterface
return new SearchEngineResult( return new SearchEngineResult(
$options, $options,
$results, // ArrayCollection of results $results, // ArrayCollection of results
$string, // the query as typed by the user
json_encode($query), json_encode($query),
$res['took'], // duration $res['took'], // duration
$options->getFirstResult(), $options->getFirstResult(),

View File

@@ -17,7 +17,8 @@ use Doctrine\Common\Collections\ArrayCollection;
class SearchEngineResult class SearchEngineResult
{ {
protected $results; protected $results;
protected $query; protected $user_query;
protected $engine_query;
protected $duration; protected $duration;
protected $offsetStart; protected $offsetStart;
protected $available; protected $available;
@@ -39,7 +40,8 @@ class SearchEngineResult
* SearchEngineResult constructor. * SearchEngineResult constructor.
* @param SearchEngineOptions $options * @param SearchEngineOptions $options
* @param ArrayCollection $results * @param ArrayCollection $results
* @param string $query * @param string $user_query query as user typed, "dog"
* @param string $engine_query query parsed for engine, "{"ast":"<text:\"dog\">","query_main" ....
* @param float $duration * @param float $duration
* @param int $offsetStart * @param int $offsetStart
* @param int $available * @param int $available
@@ -54,7 +56,8 @@ class SearchEngineResult
public function __construct( public function __construct(
SearchEngineOptions $options, SearchEngineOptions $options,
ArrayCollection $results, ArrayCollection $results,
$query, $user_query,
$engine_query,
$duration, $duration,
$offsetStart, $offsetStart,
$available, $available,
@@ -69,7 +72,8 @@ class SearchEngineResult
$this->options = $options; $this->options = $options;
$this->results = $results; $this->results = $results;
$this->query = $query; $this->user_query = $user_query;
$this->engine_query = $engine_query;
$this->duration = (float) $duration; $this->duration = (float) $duration;
$this->offsetStart = (int) $offsetStart; $this->offsetStart = (int) $offsetStart;
$this->available = (int) $available; $this->available = (int) $available;
@@ -102,12 +106,33 @@ class SearchEngineResult
/** /**
* The query related to these results * The query related to these results
* @obsolete use getUserQuery (unparsed query) or getEngineQuery (parsed)
* *
* @return string * @return string
*/ */
public function getQuery() public function getQuery()
{ {
return $this->query; return $this->getEngineQuery();
}
/**
* The unparsed query related to these results
*
* @return string
*/
public function getUserQuery()
{
return $this->user_query;
}
/**
* The parsed query related to these results
*
* @return string
*/
public function getEngineQuery()
{
return $this->engine_query;
} }
/** /**

View File

@@ -23,7 +23,8 @@ class SearchEngineResultTest extends \PhraseanetTestCase
self::$DI['record_2'] self::$DI['record_2']
]); ]);
$query = 'Gotainer'; $user_query = 'Gotainer';
$engine_query = '{text:"Gotainer"}'; // fake, real is really more complex
$duration = 1 / 3; $duration = 1 / 3;
$offsetStart = 23; $offsetStart = 23;
$available = 25; $available = 25;
@@ -31,12 +32,12 @@ class SearchEngineResultTest extends \PhraseanetTestCase
$error = 'this is an error message'; $error = 'this is an error message';
$warning = 'this is a warning message'; $warning = 'this is a warning message';
$suggestions = new ArrayCollection([ $suggestions = new ArrayCollection([
new SearchEngineSuggestion($query, 'Richard', 22) new SearchEngineSuggestion($user_query, 'Richard', 22)
]); ]);
$propositions = new ArrayCollection(); $propositions = new ArrayCollection();
$indexes = 'new-index'; $indexes = 'new-index';
$result = new SearchEngineResult($options, $results, $query, $duration, $offsetStart, $available, $total, $error, $warning, $suggestions, $propositions, $indexes); $result = new SearchEngineResult($options, $results, $user_query, $engine_query, $duration, $offsetStart, $available, $total, $error, $warning, $suggestions, $propositions, $indexes);
$this->assertEquals($warning, $result->getWarning()); $this->assertEquals($warning, $result->getWarning());
$this->assertEquals(2, $result->getTotalPages(23)); $this->assertEquals(2, $result->getTotalPages(23));
@@ -44,7 +45,8 @@ class SearchEngineResultTest extends \PhraseanetTestCase
$this->assertEquals($total, $result->getTotal()); $this->assertEquals($total, $result->getTotal());
$this->assertEquals($suggestions, $result->getSuggestions()); $this->assertEquals($suggestions, $result->getSuggestions());
$this->assertEquals($results, $result->getResults()); $this->assertEquals($results, $result->getResults());
$this->assertEquals($query, $result->getQuery()); $this->assertEquals($user_query, $result->getUserQuery());
$this->assertEquals($engine_query, $result->getEngineQuery());
$this->assertEquals($propositions, $result->getProposals()); $this->assertEquals($propositions, $result->getProposals());
$this->assertEquals($indexes, $result->getIndexes()); $this->assertEquals($indexes, $result->getIndexes());
$this->assertEquals($error, $result->getError()); $this->assertEquals($error, $result->getError());
@@ -60,7 +62,8 @@ class SearchEngineResultTest extends \PhraseanetTestCase
self::$DI['record_2'] self::$DI['record_2']
]); ]);
$query = 'Gotainer'; $user_query = 'Gotainer';
$engine_query = '{text:"Gotainer"}'; // fake, real is really more complex
$duration = 1 / 3; $duration = 1 / 3;
$offsetStart = 0; $offsetStart = 0;
$available = 25; $available = 25;
@@ -68,12 +71,12 @@ class SearchEngineResultTest extends \PhraseanetTestCase
$error = 'this is an error message'; $error = 'this is an error message';
$warning = 'this is a warning message'; $warning = 'this is a warning message';
$suggestions = new ArrayCollection([ $suggestions = new ArrayCollection([
new SearchEngineSuggestion($query, 'Richard', 22) new SearchEngineSuggestion($user_query, 'Richard', 22)
]); ]);
$propositions = new ArrayCollection(); $propositions = new ArrayCollection();
$indexes = 'new-index'; $indexes = 'new-index';
$result = new SearchEngineResult($options, $results, $query, $duration, $offsetStart, $available, $total, $error, $warning, $suggestions, $propositions, $indexes); $result = new SearchEngineResult($options, $results, $user_query, $engine_query, $duration, $offsetStart, $available, $total, $error, $warning, $suggestions, $propositions, $indexes);
$this->assertEquals(1, $result->getCurrentPage(10)); $this->assertEquals(1, $result->getCurrentPage(10));
$this->assertEquals(1, $result->getCurrentPage(25)); $this->assertEquals(1, $result->getCurrentPage(25));

View File

@@ -208,7 +208,8 @@ abstract class PhraseanetAuthenticatedWebTestCase extends \PhraseanetAuthenticat
$result = new SearchEngineResult( $result = new SearchEngineResult(
new SearchEngineOptions(), new SearchEngineOptions(),
new ArrayCollection([$elasticsearchRecord]), // Records new ArrayCollection([$elasticsearchRecord]), // Records
'', // Query '', // Query as user typed
'{}', // Query as engine parsed
0, // Duration 0, // Duration
0, // offsetStart 0, // offsetStart
1, // available 1, // available