private FulltextSearchQuery prepareSearchQuery(final List<SearchCriterion> fieldCriterionList) { final SearchCriterion fieldRangeCriterion = new FieldRangeCriterion(FIELD_DESCRIPTION, ALL, ALL); fieldRangeCriterion.setOperator(SearchOperator.AND); fieldCriterionList.add(fieldRangeCriterion); final List<Order> orderList = new ArrayList<Order>(); orderList.add(Order.relevanceOrder()); final ResultsFormat resultsFormat = new ResultsFormat(new FieldRequest(FIELD_EXID, true)); return new FulltextSearchQuery(0, searchedElementSize, resultsFormat, orderList, fieldCriterionList); }
private Order transformOrder(final OrderProto orderProto) { Order order; if (orderProto.getRelevance()) { order = Order.relevanceOrder(); } else { order = new Order(); order.setField(orderProto.getField()); order.setAscending(orderProto.getAscending()); } return order; }
private void populateFacets(FulltextSearchQuery query, SearchQuery sourceQuery) { String fieldFacet = sourceQuery.getFacetField(); if (StringUtils.isNotEmpty(fieldFacet)) { Facet facet = new Facet(); FacetParameters params = new FacetParameters().setMinCount(1); facet.addFieldFacet(fieldFacet, params); query.setFacet(facet); } }
private FulltextSearchQuery createIndexQuery(final String publicationId, String userId, Date fromDate, Date toDate) { final List<FieldRequest> fieldRequestList = new ArrayList<FieldRequest>(); fieldRequestList.add(new FieldRequest(PublicationIndexFieldConstants.FIELD_CONTENT_LAST_MODIFICATION_USER)); fieldRequestList.add(new FieldRequest(PublicationIndexFieldConstants.FIELD_CONTENT_LAST_MODIFICATION_TIMESTAMP)); final ResultsFormat resultsFormat = new ResultsFormat(fieldRequestList); final List<SearchCriterion> fieldCriterionList = new ArrayList<SearchCriterion>(); fieldCriterionList.add(new FieldCriterion(PublicationIndexFieldConstants.FIELD_EXID, publicationId, SearchOperator.AND)); fieldCriterionList.add(new FieldCriterion(PublicationIndexFieldConstants.FIELD_CONTENT_LAST_MODIFICATION_USER, userId, SearchOperator.NOT)); String fromDateString = IndexUtils.dateToString(new DateTime(fromDate)); String toDateString = IndexUtils.dateToString(new DateTime(toDate)); fieldCriterionList.add(new FieldRangeCriterion(PublicationIndexFieldConstants.FIELD_CONTENT_LAST_MODIFICATION_TIMESTAMP, fromDateString, toDateString)); final List<Order> orderList = new ArrayList<Order>(); orderList.add(new Order(PublicationIndexFieldConstants.FIELD_CONTENT_LAST_MODIFICATION_TIMESTAMP)); orderList.add(Order.relevanceOrder()); final FulltextSearchQuery searchQuery = new FulltextSearchQuery(0, 1, resultsFormat, orderList, fieldCriterionList); return searchQuery; }
public FulltextIterator(FulltextIndexService service, ResultsFormat format, List<Order> order, List<SearchCriterion> criteria, String cursorMark, int pageSize) { this.service = service; query = new FulltextSearchQuery(0, pageSize, format, order, Arrays.asList(new FieldCriterion("*", "*"))); query.setCursorMark(cursorMark); query.setUseCursor(true); for(SearchCriterion criterion:criteria){ query.addFilterCriterion(criterion); } FulltextSearchResults results = prepareNextResults(); updateContext(results); totalCount = results.getCount(); } public FulltextIterator(FulltextIndexService service, ResultsFormat format, Order order, List<SearchCriterion> criteria, String cursorMark, int pageSize) {
ResultsFormat format = transformResultsFormat(fromObject.getResultsFormat()); FulltextSearchQuery query = new FulltextSearchQuery(first, size, format); query.addAdditionalParam(transformAdditionalParam(additionalParamProto)); query.addCriterion(transformCriterion(searchCriterionProto)); query.addOrder(transformOrder(orderProto)); query.addSubquery(convertFrom(searchQueryProto)); query.setFilterName(fromObject.getFilterName()); query.setFacet(transformFacet(fromObject.getFacet()));
protected FulltextSearchResults read(final SearchCriterion... searchCriterions) throws UnexpectedInputException, ParseException, NonTransientResourceException { Assert.notNull(searchCriterions); ResultsFormat resultsFormat = new ResultsFormat(new ArrayList<FieldRequest>()); FulltextSearchQuery searchQuery = new FulltextSearchQuery(amountOfReadItems, bufferSize, resultsFormat, searchCriterions); FulltextSearchResults results = fulltextIndexService.performSearch(searchQuery); amountOfReadItems += results.getSize(); return results; }
private void applyOrder(AdvancedSearchRequest request, FulltextSearchQuery searchQuery, SearchScheme scheme) { if (StringUtils.isNotEmpty(request.getOrderField())) { String orderField = request.getOrderField(); List<String> fields = getSortByFieldName(scheme, orderField); applyOrderFields(request, searchQuery, scheme, fields, request.isOrderAscending()); } if (CollectionUtils.isEmpty(searchQuery.getOrders())) { searchQuery.addOrder(Order.relevanceOrder()); List<String> fields = getSortByFieldName(scheme, "sortdate"); if (!fields.isEmpty()) { applyOrderFields(request, searchQuery, scheme, fields, true); } } }
private void applyOrderFields(AdvancedSearchRequest request, FulltextSearchQuery searchQuery, SearchScheme scheme, List<String> fields, final boolean baseOrder) { for (String field : fields) { if (StringUtils.isNotEmpty(field)) { boolean order = baseOrder; if ((scheme.getSpecialFieldTypes().containsKey(field) && scheme.getSpecialFieldTypes().get(field).equals("dateType")) || (IndexFieldConstants.FOR_SORT_PREFIX + PublicationIndexFieldConstants.FIELD_DATE).equals(request.getOrderField())) { order = !order; } searchQuery.addOrder(new Order(field, order)); } } }
@Override @RequiresServiceRole(roleName="READ") public FulltextSearchResults performSearch(final FulltextSearchQuery query, final String token) { final FulltextSearchQuery modifiedQuery; if (token == null) { modifiedQuery = query; } else { modifiedQuery = searchQueryCopyingService.copySearchQuery(query); modifiedQuery.setFirst(query.getFirst() + (query.getSize() * Integer.parseInt(token))); } return preIndexServer.search(modifiedQuery, modifiedQuery.getFormat()); }
public ArticleSearchQuery oderdByTitleAscending() { setOrder(new Order(FieldNames.ARTICLE_TITLE, true)); return this; }
@Override public SearchResults search(SearchQuery query) { preprocessCriteria(query.getCriteria()); query.addTrueCritIfEmpty(); FulltextSearchQuery q = new FulltextSearchQuery(query.getFirst(), query.getLimit(), null, query.getOrder(), criteriaArray(query.getCriteria())); populateFacets(q, query); logger.info("running fulltextSearchQuery : "+ q); FulltextSearchResults res = indexService.performSearch(q); return new SearchResults(res); }
private void addTransformedSearchCriterionToQuery(SearchCriterion baseCriterion, FulltextSearchQuery query, SearchCriterionTransformer[] transformFlow, SearchCriterionTransformerHint hint, SearchScheme scheme, boolean score) { for (SearchCriterionTransformer searchCriterionTransformer : transformFlow) { baseCriterion = searchCriterionTransformer.transform(baseCriterion, scheme, hint); } if (!isCriterionEmpty(baseCriterion)) { if(score){ query.addCriterion(baseCriterion); }else { query.addFilterCriterion(baseCriterion); } } }
/** * Construct query using SearchQuery object. <BR> * <B><I>Only criteria and subqueries are used from given object. Any other * parameters are ommited.</I></B> * * @param searchQuery the search query * @param schema the fields metadata * @param depth the depth * @return the single query * */ private String constructQueryWithDetectedQueryType(final FulltextSearchQuery searchQuery, final FulltextIndexSchema schema, final long depth) { final QueryType queryType = detectQueryType(searchQuery.getCriteria(), schema); return SolrConstant.queryTypePrefix(queryType) + constructQuery(searchQuery.getCriteria(), searchQuery.getSubqueries(), schema, depth); }
@Override @RequiresServiceRole(roleName="READ") public void validateQuery(final FulltextSearchQuery query) { final QueryBuilder queryBuilder = new QueryBuilder(); queryBuilder.detectQueryType(query.getCriteria(), indexManager .getIndex().getSchema()); }
private synchronized FulltextSearchResults prepareNextResults(){ if(baseIterator != null && baseIterator.hasNext()){ return null; } query.setCursorMark(cursorMark); FulltextSearchResults results = service.performSearch(query); return results; }
private FulltextSearchQuery createIndexQuery(final String observedUserId, String userId, Date fromDate, Date toDate) { final List<FieldRequest> fieldRequestList = new ArrayList<FieldRequest>(); fieldRequestList.add(new FieldRequest(PublicationIndexFieldConstants.FIELD_EXID)); fieldRequestList.add(new FieldRequest(PublicationIndexFieldConstants.FIELD_CREATED_BY_USER_TIMESTAMP)); final ResultsFormat resultsFormat = new ResultsFormat(fieldRequestList); final List<SearchCriterion> fieldCriterionList = new ArrayList<SearchCriterion>(); fieldCriterionList.add(new FieldCriterion(PublicationIndexFieldConstants.FIELD_USER_UID_CREATOR, observedUserId, SearchOperator.AND)); String fromDateString = IndexUtils.dateToString(new DateTime(fromDate)); String toDateString = IndexUtils.dateToString(new DateTime(toDate)); fieldCriterionList.add(new FieldRangeCriterion(PublicationIndexFieldConstants.FIELD_CREATED_BY_USER_TIMESTAMP, fromDateString, toDateString)); final List<Order> orderList = new ArrayList<Order>(); orderList.add(new Order(PublicationIndexFieldConstants.FIELD_CREATED_BY_USER_TIMESTAMP)); orderList.add(Order.relevanceOrder()); final FulltextSearchQuery searchQuery = new FulltextSearchQuery(0, getAggregationNumberLimit()+1, resultsFormat, orderList, fieldCriterionList); return searchQuery; }
public JournalSearchQuery oderdByTitleAscending() { setOrder(new Order(FieldNames.JOURNAL_TITLE, true)); return this; }
@Override public Iterator<FulltextSearchResult> apply(Record t) { if (inputFilter == null || inputFilter.evaluate(t)) { FulltextIterator fulltextIterator = new FulltextIterator(indexService, resultsFormat, ImmutableList .of(new Order(PublicationIndexFieldConstants.FIELD_HIERARCHY_LEVEL_ID, true), new Order(SolrConstant.ID_FIELD, true)), criteriaFactory.apply(t), null); return fulltextIterator; } return Collections.emptyIterator(); }