Как я могу получить объекты 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);
Другие вопросы по тегам