mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-18 15:33:15 +00:00
PHRAS-842_search-logged-as-es_4.0
- fix : query is logged in a "user" form, before parsing
This commit is contained in:
@@ -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();
|
||||||
|
@@ -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();
|
||||||
|
@@ -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 = [
|
||||||
|
@@ -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(),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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(),
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -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));
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user