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

View File

@@ -1486,7 +1486,7 @@ class V1Controller extends Controller
$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) {
$colls = array_map(function (\collection $collection) {
@@ -1496,7 +1496,7 @@ class V1Controller extends Controller
}));
$this->getSearchEngineLogger()
->log($databox, $search_result->getQuery(), $search_result->getTotal(), $colls);
->log($databox, $search_result->getUserQuery(), $search_result->getTotal(), $colls);
}
$this->getSearchEngine()->clearCache();

View File

@@ -75,7 +75,7 @@ class QueryController extends Controller
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;
@@ -185,7 +185,7 @@ class QueryController extends Controller
$json['results'] = $this->render($template, ['results'=> $result]);
/** Debug */
$json['parsed_query'] = $result->getQuery();
$json['parsed_query'] = $result->getEngineQuery();
/** End debug */
$fieldLabels = [

View File

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

View File

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

View File

@@ -17,7 +17,8 @@ use Doctrine\Common\Collections\ArrayCollection;
class SearchEngineResult
{
protected $results;
protected $query;
protected $user_query;
protected $engine_query;
protected $duration;
protected $offsetStart;
protected $available;
@@ -39,7 +40,8 @@ class SearchEngineResult
* SearchEngineResult constructor.
* @param SearchEngineOptions $options
* @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 int $offsetStart
* @param int $available
@@ -54,7 +56,8 @@ class SearchEngineResult
public function __construct(
SearchEngineOptions $options,
ArrayCollection $results,
$query,
$user_query,
$engine_query,
$duration,
$offsetStart,
$available,
@@ -69,7 +72,8 @@ class SearchEngineResult
$this->options = $options;
$this->results = $results;
$this->query = $query;
$this->user_query = $user_query;
$this->engine_query = $engine_query;
$this->duration = (float) $duration;
$this->offsetStart = (int) $offsetStart;
$this->available = (int) $available;
@@ -102,12 +106,33 @@ class SearchEngineResult
/**
* The query related to these results
* @obsolete use getUserQuery (unparsed query) or getEngineQuery (parsed)
*
* @return string
*/
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']
]);
$query = 'Gotainer';
$user_query = 'Gotainer';
$engine_query = '{text:"Gotainer"}'; // fake, real is really more complex
$duration = 1 / 3;
$offsetStart = 23;
$available = 25;
@@ -31,12 +32,12 @@ class SearchEngineResultTest extends \PhraseanetTestCase
$error = 'this is an error message';
$warning = 'this is a warning message';
$suggestions = new ArrayCollection([
new SearchEngineSuggestion($query, 'Richard', 22)
new SearchEngineSuggestion($user_query, 'Richard', 22)
]);
$propositions = new ArrayCollection();
$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(2, $result->getTotalPages(23));
@@ -44,7 +45,8 @@ class SearchEngineResultTest extends \PhraseanetTestCase
$this->assertEquals($total, $result->getTotal());
$this->assertEquals($suggestions, $result->getSuggestions());
$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($indexes, $result->getIndexes());
$this->assertEquals($error, $result->getError());
@@ -60,7 +62,8 @@ class SearchEngineResultTest extends \PhraseanetTestCase
self::$DI['record_2']
]);
$query = 'Gotainer';
$user_query = 'Gotainer';
$engine_query = '{text:"Gotainer"}'; // fake, real is really more complex
$duration = 1 / 3;
$offsetStart = 0;
$available = 25;
@@ -68,12 +71,12 @@ class SearchEngineResultTest extends \PhraseanetTestCase
$error = 'this is an error message';
$warning = 'this is a warning message';
$suggestions = new ArrayCollection([
new SearchEngineSuggestion($query, 'Richard', 22)
new SearchEngineSuggestion($user_query, 'Richard', 22)
]);
$propositions = new ArrayCollection();
$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(25));

View File

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