Blakes Seven ответил на это правильно, однако я хочу предложить более эффективную реализацию AggregationOperation, которая следует за стандартной реализацией Spring
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import org.springframework.data.mongodb.core.aggregation.AggregationOperation;
import org.springframework.data.mongodb.core.aggregation.AggregationOperationContext;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.util.Assert;
public class SampleOperation implements AggregationOperation {
private int size;
public SampleOperation(int size) {
Assert.isTrue(size > 0, " Size must be positive!");
this.size = size;
}
public AggregationOperation setSize(int size) {
Assert.isTrue(size > 0, " Size must be positive!");
this.size = size;
return this;
}
@Override
public DBObject toDBObject(AggregationOperationContext context) {
return new BasicDBObject("$sample", context.getMappedObject(Criteria.where("size").is(size).getCriteriaObject()));
}
}
. После этого вы можете создать объект SampleOperation с помощью конструктора или позже изменить размер его с помощью метода setSize()
и применить его к функции aggregate()
как обычно.
Обновление: в SpringBoot 2.0.0+ и Spring Framework 5.0: Spring Mongo drop DBObject
и заменить на org.bson.Document
, поэтому последнее прошлое должно обновляться как:
@Override
public Document toDocument(AggregationOperationContext aggregationOperationContext) {
return new Document("$sample", aggregationOperationContext.getMappedObject(Criteria.where("size").is(size).getCriteriaObject()));
}
И удалить @Override toDBObject
Я записал длинное сообщение о своих событиях и функциях всех механизмов, которые я упомянул ниже, но я фрагментировал его, потому что форматирование является лавашем. Но вполне просто, если Вы не хотите выходить из оболочки деньги, Solr/Lucene или Быстро (теперь MSSE) действительно о лучшем, которое можно сделать.
Исключенный, потому что у меня нет опыта этого продукта: Навигационный знак,
+1 для Lucene и FAST. Lucene был также портирован к.NET, если Вы интересуетесь расширением его.
Вот некоторые поисковые системы более с открытым исходным кодом
Здесь является некоторыми связанными с поиском инструментами
, библиотека Forage The Forage PHP5 является простым в использовании интерфейсом к нескольким библиотекам поиска бэкэнда. Это обеспечивает единый интерфейс, поддерживая уникальные функции в каждой библиотеке, позволяя бэкендам поддерживать определенные функции или нет.
Marjory Marjory является веб-сервисом для индексации и поиска документов, используя механизм полнотекстового поиска.
Быстрый ESP, который Microsoft купила в январе 2008
IBM Omnifind Выпуск Yahoo является поисковым сервером Предприятия, который использует Apache Lucene для индексации. Это просто, легко установить и администрировать. Это также имеет встроенный, Открывают Search API. Это имеет поддержку разных платформ и его Свободное!!
Этот продукт был запущен IBM для конкуренции с Google Mini на рынке Поиска Предприятия.
В дополнение к тем, что люди уже упомянули, Microsoft имеет" Microsoft Search Server " и" Microsoft Search Server Express ". Последний свободен, бывшие поддержки больший корпус.
Сегодня мы используем Fast. В нем много замечательных функций, но мы ими не пользуемся. Это дорого. Мы также ищем альтернативное решение.
А как насчет FACT-Finder? Например, www.eddiebauer.de использует решение для поиска и навигации и более 500 других интернет-магазинов в Европе. Высокая устойчивость к ошибкам ...
Я работал с Endeca на периферии, и мне кажется, что это многофункциональный и быстрый движок.
Кажется, они особенно хорошо подходят для управления сайтами электронной коммерции, со специальными инструментами для настройки контента для повышения продаж и перекрестных продаж. Я также думаю, что они собираются попробовать продвинуться в BI-пространство, так что это должно быть интересное сочетание двух возможностей, если они справятся с этим без проблем".
Раньше я работал в Endeca, так что примите это таким, какое оно есть . Я не буду комментировать конкурентов, но я действительно считаю, что это значительно лучший продукт, чем что-либо еще.
Solr обеспечивает базовый фасетный поиск, который «достаточно хорош» для многих приложений. Во многих смыслах это Endeca бюджетного класса.
Некоторые из вещей, которые Endeca может дать вам по сравнению с Solr:
И, разумеется, услуги и поддержка.
Тем не менее, это недешево, поэтому, если у вас нет на это бюджета, Solr - неплохой вариант.