@Override public SearchResult search(String searchTerm, QueryKey queryKey) { SearchResult searchResult = new SearchResult(searchTerm); int maxSearchResults = coreConfig.getMaxSearchResults(); boolean searchByTerm = false; if (queryKey == null || queryKey.isSearchByTermAgain()) { searchByTerm = true; searchByTerm(searchResult, searchTerm, queryKey, maxSearchResults); if (searchResult.getCount() == 0 && searchResult.getIdsCount() == 0) { return searchResult; } } if (!searchByTerm) { searchResult.getQueryKey().setIds(queryKey.getIds()); searchResult.getQueryKey().setFirstResult(queryKey.getFirstResult()); } searchByLinks(queryKey, searchResult, maxSearchResults); if (!searchByTerm && searchResult.getCount() == 0 && searchResult.getQueryKey().isSearchByTermAgain()) { return search(searchTerm, searchResult.getQueryKey()); } else { return searchResult; } }
@Override public FtsSearchResult search(String searchTerm, String entityName) { List<String> entityNames = ftsService.collectEntityHierarchyNames(entityName); SearchResult searchResult = ftsService.search(searchTerm.toLowerCase(), entityNames); List ids = new ArrayList<>(); Map<Object, String> resultHitInfos = new HashMap<>(); for (String entity : searchResult.getEntityNames()) { for (SearchResultEntry entry : searchResult.getEntries(entity)) { ids.add(entry.getId()); HitInfo hitInfo = searchResult.getHitInfo(entry.getId(), entityName); if (hitInfo != null) { StringBuilder sb = new StringBuilder(); for (Map.Entry<String, String> hitEntry : hitInfo.getHits().entrySet()) { sb.append(ftsService.getHitPropertyCaption(entity, hitEntry.getKey())) .append(": ") .append(hitEntry.getValue()) .append("<br/>"); } resultHitInfos.put(entry.getId(), sb.toString()); } } } int queryKey = getNextQueryKey(); queryResultsService.insert(queryKey, ids); FtsSearchResult ftsSearchResult = new FtsSearchResult(); ftsSearchResult.setQueryKey(queryKey); ftsSearchResult.setHitInfos(resultHitInfos); return ftsSearchResult; }
protected void searchByTerm(SearchResult searchResult, String searchTerm, QueryKey queryKey, int maxSearchResults) { int currentCount = 0; int firstResult = queryKey == null ? 0 : queryKey.getFirstResult(); boolean emptyIndex = false; while (currentCount < maxSearchResults && !emptyIndex) { List<EntityInfo> indexResult = luceneSearcher.searchAllField(searchTerm, firstResult, maxSearchResults); if (!indexResult.isEmpty()) { databaseDataLoader.mergeSearchData(searchResult, indexResult, false, (entityId, entityInfo) -> { searchResult.addHit(entityId, entityInfo.getEntityName(), entityInfo.getText(), createNormalizer()); searchResult.getQueryKey().addId(entityId, entityInfo.getEntityName(), entityInfo.getText()); }); currentCount = Math.max(searchResult.getCount(), searchResult.getIdsCount()); firstResult += maxSearchResults; searchResult.getQueryKey().setFirstResult(firstResult); } else { emptyIndex = true; } } }
protected void searchByLinks(QueryKey queryKey, SearchResult searchResult, int maxSearchResults) { EntityKey currentEntityKey = queryKey == null ? null : queryKey.getLastId(); boolean skip = true; for (EntityKey entityKey : searchResult.getQueryKey().getIds()) { if (searchResult.getCount() >= maxSearchResults) { break; while (searchResult.getCount() < maxSearchResults && !emptyIndex) { List<EntityInfo> indexResult = luceneSearcher.searchLinksField(entityKey.toString(), firstResult, maxSearchResults); if (!indexResult.isEmpty()) { databaseDataLoader.mergeSearchData(searchResult, indexResult, true, (entityIdWithLink, entityInfoWithLink) -> { searchResult.addLinkedHit(entityIdWithLink, entityInfoWithLink.getEntityName(), entityKey.getText(), entityKey.getEntityName(), createNormalizer()); }); searchResult.getQueryKey().setLinksFirstResult(firstResult); searchResult.getQueryKey().setLastId(currentEntityKey); break; } else { List<EntityKey> ids = searchResult.getQueryKey().getIds(); if (ids.indexOf(currentEntityKey) == ids.size() - 1) { searchResult.getQueryKey().setLastId(null); searchResult.getQueryKey().setLinksFirstResult(0); searchResult.getQueryKey().setSearchByTermAgain(true); } else { searchResult.getQueryKey().setLastId(ids.get(ids.indexOf(currentEntityKey) + 1)); searchResult.getQueryKey().setLinksFirstResult(0);
protected void openNextPage() { Page lastPage = getLastPage(); if (lastPage != null) { SearchResult lastSearchResult = lastPage.getSearchResult(); SearchResult searchResult = ftsService.search(lastSearchResult.getSearchTerm(), lastSearchResult.getQueryKey()); if (searchResult.getCount() == 0) { currentPage.setLastPage(true); paintNavigationControls(pages); showNotification(getMessage("notFound"), NotificationType.HUMANIZED); } else { currentPage = new Page(lastPage.getPageNumber() + 1); currentPage.setSearchResult(searchResult); pages.add(currentPage); paintResult(currentPage); paintNavigationControls(pages); } } }
protected void displayInstances(SearchResult searchResult, String entityName, CssLayout instancesLayout) { Set<SearchResultEntry> entries = searchResult.getEntries(entityName); for (SearchResultEntry entry : entries) { Button instanceBtn = createInstanceButton(entityName, entry); instanceBtn.setAlignment(Alignment.MIDDLE_LEFT); instanceBtn.addStyleName("c-fts-entity"); instancesLayout.add(instanceBtn); HitInfo hi = searchResult.getHitInfo(entry.getId(), entityName); if (hi != null) { List<String> list = new ArrayList<>(hi.getHits().size()); for (Map.Entry<String, String> hitEntry : hi.getHits().entrySet()) { String hitProperty = hitEntry.getKey(); list.add(ftsService.getHitPropertyCaption(entityName, hitProperty) + ": " + hitEntry.getValue()); } Collections.sort(list); for (String caption : list) { Label hitLabel = createHitLabel(caption); hitLabel.addStyleName("c-fts-hit"); hitLabel.addStyleName("fts-hit"); hitLabel.setAlignment(Alignment.MIDDLE_LEFT); instancesLayout.add(hitLabel); } } } }
SearchResult searchResult = new SearchResult(searchTerm); for (EntityInfo entityInfo : allFieldResults) { searchResult.addHit(entityInfo.getId(), entityInfo.getEntityName(), entityInfo.getText(), createNormalizer()); searchResult.addEntry(entry); searchResult.addLinkedHit(entityWithLinkInfo.getId(), entityWithLinkInfo.getEntityName(), linkedEntitiesInfo.getText(), linkedEntitiesInfo.getEntityName(), createNormalizer()); searchResult.addEntry(new SearchResultEntry(entityWithLinkInfo.getId(), entityWithLinkInfo.getEntityName(), entityWithLinkInfo.getId().toString()));
protected void paintResult(Page page) { contentBox.removeAll(); SearchResult searchResult = page.getSearchResult(); if (searchResult.isEmpty()) { contentBox.add(createNotFoundLabel()); } else { for (String entityName : searchResult.getEntityNames()) { entities.add(new Pair<>( entityName,
if (lastPage != null && lastPage.getSearchResult() != null) { SearchResult lastSearchResult = lastPage.getSearchResult(); showNextPage = lastSearchResult.getCount() != 0 && !lastPage.isLastPage();
searchResult.addEntry(new SearchResultEntry(entityId, entityInfo.getEntityName(), entity.getInstanceName()));