/** * Get a document field raw value or list of raw values. * * <pre><code> * assert document.title = "Big bad wolf" * assert document.keyword[0] == "wolf" * assert document.keyword[1] == "red hook" * </code></pre> * * @param document the document * @param fieldName the field name * @return a raw value or a list of raw values if the field is multivalued */ public static Object get(Document document, String fieldName) { @SuppressWarnings("unchecked") List<Field> fields = (List<Field>) DefaultGroovyMethods.collect(document.getFields(fieldName)); switch (fields.size()) { case 0: if (document instanceof ScoredDocument) { List<Object> exps = new ArrayList<Object>(); for (Field f : ((ScoredDocument) document).getExpressions()) { if (f.getName().equals(fieldName)) { exps.add(getFieldRawValue(f)); } } if (exps.size() == 0) { return null; } if (exps.size() == 1) { return exps.get(0); } return exps; } return null; case 1: return getFieldRawValue(fields.get(0)); default: List<Object> exps = new ArrayList<Object>(); for (Field f : fields) { exps.add(getFieldRawValue(f)); } return exps; } }
protected Document buildDocument(K id, Map<String, Object> fields) { String stringId = convert(id, String.class); Builder documentBuilder = Document.newBuilder(); documentBuilder.setId(stringId); for (Map.Entry<String, Object> fieldData : fields.entrySet()) { Object value = fieldData.getValue(); String fieldName = fieldData.getKey(); for (Object object : getCollectionValues(value)) { try { Field field = buildField(metadata, fieldName, object); documentBuilder.addField(field); } catch (Exception e) { throw new SearchException( e, "Failed to add field '%s' with value '%s' to document with id '%s': %s", fieldName, value.toString(), id, e.getMessage()); } } } return documentBuilder.build(); }
protected int removeAll() { int count = 0; Index index = getIndex(); GetRequest request = GetRequest.newBuilder().setReturningIdsOnly(true).setLimit(200).build(); GetResponse<Document> response = index.getRange(request); // can only delete documents in blocks of 200 so we need to iterate until they're all gone while (!response.getResults().isEmpty()) { List<String> ids = new ArrayList<String>(); for (Document document : response) { ids.add(document.getId()); } index.delete(ids); count += ids.size(); response = index.getRange(request); } return count; }
@Override public Document toDocument() { Document document = Document.newBuilder() .setId(id) .addField(Field.newBuilder().setName(ComentarioFields.id.name()).setText(id)) .addField( Field.newBuilder().setName(ComentarioFields.conteudo.name()).setText(conteudo)) .addField(Field.newBuilder().setName(ComentarioFields.usuario.name()).setText(usuario)) .build(); return document; }
// Index the geo location private void indexProduct(DProduct dProduct) { if (null != dProduct.getLocation()) { GeoPoint geoPoint = new GeoPoint(dProduct.getLocation().getLatitude(), dProduct.getLocation().getLongitude()); int averageRating = (null != dProduct.getRatingAverage()) ? dProduct.getRatingAverage().getRating() : -1; Document.Builder locationBuilder = Document.newBuilder() .setId(dProduct.getProductId()) .addField(Field.newBuilder().setName("location").setGeoPoint(geoPoint)) .addField(Field.newBuilder().setName("averageRating").setNumber(averageRating)) .addField(Field.newBuilder().setName("likeCount").setNumber(dProduct.getLikeCount())) .addField(Field.newBuilder().setName("thumbsUp").setNumber(dProduct.getThumbsUp())); getLocationIndex().add(locationBuilder.build()); } }