Как я могу получить объекты DBObject, которые содержат подстроку поискового слова?
Я использую MongoDB с драйвером Java ( http://tinyurl.com/dyjxz8k). В моем приложении я хочу, чтобы можно было давать результаты, содержащие подстроку поискового запроса пользователей. Метод выглядит так:
* searchlabel = название поля *searchTerm = пользовательское поисковое слово
private void dbSearch(String searchlabel, String searchTerm){
if(searchTerm != null && (searchTerm.length() > 0)){
DBCollection coll = db.getCollection("MediaCollection");
BasicDBObject query = new BasicDBObject(searchlabel, searchTerm);
DBCursor cursor = coll.find();
cursor = coll.find(query);
try {
while(cursor.hasNext()) {
System.out.println(cursor.next());
//view.showResult(cursor.next());
}
} finally {
cursor.close();
}
}
}
Кто-нибудь знает, как я могу решить это? Заранее спасибо =) И небольшой дополнительный вопрос: Как я могу обрабатывать объекты DBO в соответствии с представлением в представлении (JLabel in)?
2 ответа
Для поиска текста в Mongo есть два варианта:
$regex
оператор - однако, если у вас нет простого префикса regexp, запросы не будут использовать индекс и приведут к полной проверке, которая обычно медленная- В Mongo 2.4 был введен новый текстовый индекс.
text
query разделит ваш запрос на слова и выполнит поиск или поиск документов, включая любое из слов. Текстовые индексы также исключают некоторые стоп-слова и имеют простые основы для некоторых языков (см. Документы).
Если вы ищете более продвинутую систему полнотекстового поиска с более мощным токенингом, стеммингом, автозаполнением и т. Д., Возможно, лучше подойдет, например, ElasticSearch.
Я использую этот метод в консоли Монго для поиска по регулярному выражению в JavaScript:
// My name to search for
var searchWord = "alex";
// Construct a query with a simple /^alex$/i regex
var query = {};
query.animalName = new RegExp("^"+searchWord+"$","i");
// Perform find operation
var lionsNamedAlex = db.lions.find(query);