use of org.eclipse.che.api.vfs.search.SearchResult in project che by eclipse.
the class ProjectService method search.
@GET
@Path("/search/{path:.*}")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Search for resources", notes = "Search for resources applying a number of search filters as query parameters", response = ItemReference.class, responseContainer = "List")
@ApiResponses({ @ApiResponse(code = 200, message = "OK"), @ApiResponse(code = 403, message = "User not authorized to call this operation"), @ApiResponse(code = 404, message = "Not found"), @ApiResponse(code = 409, message = "Conflict error"), @ApiResponse(code = 500, message = "Internal Server Error") })
public List<ItemReference> search(@ApiParam(value = "Path to resource, i.e. where to search?", required = true) @PathParam("path") String path, @ApiParam(value = "Resource name") @QueryParam("name") String name, @ApiParam(value = "Search keywords") @QueryParam("text") String text, @ApiParam(value = "Maximum items to display. If this parameter is dropped, there are no limits") @QueryParam("maxItems") @DefaultValue("-1") int maxItems, @ApiParam(value = "Skip count") @QueryParam("skipCount") int skipCount) throws NotFoundException, ForbiddenException, ConflictException, ServerException {
final Searcher searcher;
try {
searcher = projectManager.getSearcher();
} catch (NotFoundException e) {
LOG.warn(e.getLocalizedMessage());
return Collections.emptyList();
}
if (skipCount < 0) {
throw new ConflictException(String.format("Invalid 'skipCount' parameter: %d.", skipCount));
}
final QueryExpression expr = new QueryExpression().setPath(path.startsWith("/") ? path : ('/' + path)).setName(name).setText(text).setMaxItems(maxItems).setSkipCount(skipCount);
final SearchResult result = searcher.search(expr);
final List<SearchResultEntry> searchResultEntries = result.getResults();
final List<ItemReference> items = new ArrayList<>(searchResultEntries.size());
final FolderEntry root = projectManager.getProjectsRoot();
for (SearchResultEntry searchResultEntry : searchResultEntries) {
final VirtualFileEntry child = root.getChild(searchResultEntry.getFilePath());
if (child != null && child.isFile()) {
items.add(injectFileLinks(asDto((FileEntry) child)));
}
}
return items;
}
use of org.eclipse.che.api.vfs.search.SearchResult in project che by eclipse.
the class FSLuceneSearcherTest method retrievesSearchResultWithPages.
@Test
public void retrievesSearchResultWithPages() throws Exception {
VirtualFileSystem virtualFileSystem = virtualFileSystem();
for (int i = 0; i < 100; i++) {
virtualFileSystem.getRoot().createFile(String.format("file%02d", i), TEST_CONTENT[i % TEST_CONTENT.length]);
}
searcher.init(virtualFileSystem);
SearchResult firstPage = searcher.search(new QueryExpression().setText("spaceflight").setMaxItems(8));
assertEquals(8, firstPage.getFilePaths().size());
QueryExpression nextPageQueryExpression = firstPage.getNextPageQueryExpression().get();
nextPageQueryExpression.setMaxItems(100);
SearchResult lastPage = searcher.search(nextPageQueryExpression);
assertEquals(17, lastPage.getFilePaths().size());
assertTrue(Collections.disjoint(firstPage.getFilePaths(), lastPage.getFilePaths()));
}
use of org.eclipse.che.api.vfs.search.SearchResult in project che by eclipse.
the class MemoryLuceneSearcherTest method generatesQueryExpressionForRetrievingNextPageOfResults.
@Test
public void generatesQueryExpressionForRetrievingNextPageOfResults() throws Exception {
VirtualFileSystem virtualFileSystem = virtualFileSystem();
for (int i = 0; i < 100; i++) {
virtualFileSystem.getRoot().createFile(String.format("file%02d", i), TEST_CONTENT[i % TEST_CONTENT.length]);
}
searcher.init(virtualFileSystem);
SearchResult result = searcher.search(new QueryExpression().setText("spaceflight").setMaxItems(7));
assertEquals(25, result.getTotalHits());
Optional<QueryExpression> optionalNextPageQueryExpression = result.getNextPageQueryExpression();
assertTrue(optionalNextPageQueryExpression.isPresent());
QueryExpression nextPageQueryExpression = optionalNextPageQueryExpression.get();
assertEquals("spaceflight", nextPageQueryExpression.getText());
assertEquals(7, nextPageQueryExpression.getSkipCount());
assertEquals(7, nextPageQueryExpression.getMaxItems());
}
use of org.eclipse.che.api.vfs.search.SearchResult in project che by eclipse.
the class MemoryLuceneSearcherTest method limitsNumberOfSearchResultsWhenMaxItemIsSet.
@Test
public void limitsNumberOfSearchResultsWhenMaxItemIsSet() throws Exception {
VirtualFileSystem virtualFileSystem = virtualFileSystem();
for (int i = 0; i < 100; i++) {
virtualFileSystem.getRoot().createFile(String.format("file%02d", i), TEST_CONTENT[i % TEST_CONTENT.length]);
}
searcher.init(virtualFileSystem);
SearchResult result = searcher.search(new QueryExpression().setText("mission").setMaxItems(5));
assertEquals(25, result.getTotalHits());
assertEquals(5, result.getFilePaths().size());
}
use of org.eclipse.che.api.vfs.search.SearchResult in project che by eclipse.
the class MemoryLuceneSearcherTest method retrievesSearchResultWithPages.
@Test
public void retrievesSearchResultWithPages() throws Exception {
VirtualFileSystem virtualFileSystem = virtualFileSystem();
for (int i = 0; i < 100; i++) {
virtualFileSystem.getRoot().createFile(String.format("file%02d", i), TEST_CONTENT[i % TEST_CONTENT.length]);
}
searcher.init(virtualFileSystem);
SearchResult firstPage = searcher.search(new QueryExpression().setText("spaceflight").setMaxItems(8));
assertEquals(8, firstPage.getFilePaths().size());
QueryExpression nextPageQueryExpression = firstPage.getNextPageQueryExpression().get();
nextPageQueryExpression.setMaxItems(100);
SearchResult lastPage = searcher.search(nextPageQueryExpression);
assertEquals(17, lastPage.getFilePaths().size());
assertTrue(Collections.disjoint(firstPage.getFilePaths(), lastPage.getFilePaths()));
}
Aggregations