5
5
use App \Dto \SearchDemand ;
6
6
use App \Repository \ElasticRepository ;
7
7
use Elastica \Exception \InvalidException ;
8
- use JsonException ;
9
8
use Symfony \Bundle \FrameworkBundle \Controller \AbstractController ;
9
+ use Symfony \Component \HttpFoundation \JsonResponse ;
10
10
use Symfony \Component \HttpFoundation \Request ;
11
11
use Symfony \Component \HttpFoundation \Response ;
12
12
use Symfony \Component \Routing \Annotation \Route ;
@@ -36,6 +36,7 @@ public function search(Request $request): Response
36
36
if ($ request ->query ->get ('q ' , '' ) === '' ) {
37
37
return $ this ->redirectToRoute ('index ' );
38
38
}
39
+
39
40
$ searchDemand = SearchDemand::createFromRequest ($ request );
40
41
41
42
return $ this ->render ('search/search.html.twig ' , [
@@ -46,31 +47,49 @@ public function search(Request $request): Response
46
47
]);
47
48
}
48
49
49
- /**
50
- * @return Response
51
- * @throws InvalidException|JsonException
52
- */
53
50
#[Route(path: '/suggest ' , name: 'suggest ' )]
54
51
public function suggest (Request $ request ): Response
55
52
{
56
53
$ searchDemand = SearchDemand::createFromRequest ($ request );
54
+ $ jsonData = [
55
+ 'demand ' => $ searchDemand ->toArray (),
56
+ 'suggest ' => $ this ->elasticRepository ->suggestScopes ($ searchDemand )
57
+ ];
57
58
58
- $ results = $ this ->elasticRepository ->suggest ($ searchDemand );
59
- $ suggestions = [];
60
- foreach ($ results ['results ' ] as $ result ) {
61
- $ hit = $ result ->getData ();
62
- $ suggestions [] = [
63
- 'label ' => $ hit ['snippet_title ' ],
64
- 'value ' => $ hit ['snippet_title ' ],
65
- 'url ' => 'https://docs.typo3.org/ ' . $ hit ['manual_slug ' ] . '/ ' . $ hit ['relative_url ' ] . '# ' . $ hit ['fragment ' ],
66
- 'group ' => $ hit ['manual_title ' ],
67
- 'content ' => \mb_substr ((string )$ hit ['snippet_content ' ], 0 , 100 )
68
- ];
69
- }
70
- $ jsonBody = \json_encode ($ suggestions , JSON_THROW_ON_ERROR );
59
+ $ searchResults = $ this ->elasticRepository ->searchDocumentsForSuggest ($ searchDemand );
60
+ $ jsonData ['time ' ] = $ searchResults ['time ' ];
61
+
62
+ $ jsonData ['results ' ] = array_map (static function ($ result ) {
63
+ return $ result ->getData ();
64
+ }, $ searchResults ['results ' ]);
65
+
66
+ return new JsonResponse ($ jsonData );
67
+ }
68
+
69
+ #[Route(path: '/suggest/list ' , name: 'suggest-list ' )]
70
+ public function suggestList (Request $ request ): Response
71
+ {
72
+ $ searchDemand = SearchDemand::createFromRequest ($ request );
73
+ $ jsonData = [
74
+ 'demand ' => $ searchDemand ->toArray (),
75
+ 'suggest ' => $ this ->elasticRepository ->suggestScopes ($ searchDemand )
76
+ ];
77
+
78
+ return new JsonResponse ($ jsonData );
79
+ }
80
+
81
+ #[Route(path: '/suggest/results ' , name: 'suggest-results ' )]
82
+ public function suggestResults (Request $ request ): Response
83
+ {
84
+ $ searchDemand = SearchDemand::createFromRequest ($ request );
85
+
86
+ $ searchResults = $ this ->elasticRepository ->searchDocumentsForSuggest ($ searchDemand );
87
+ $ jsonData ['time ' ] = $ searchResults ['time ' ];
88
+
89
+ $ jsonData ['results ' ] = array_map (static function ($ result ) {
90
+ return $ result ->getData ();
91
+ }, $ searchResults ['results ' ]);
71
92
72
- $ response = new Response ();
73
- $ response ->setContent ($ jsonBody );
74
- return $ response ;
93
+ return new JsonResponse ($ jsonData );
75
94
}
76
95
}
0 commit comments