MongoDB , JavaDriver e Full Text Search

Con le nuove versioni di MongoDB, è stata portata alla luce, anche sul driver java ,la possibilità di avere indici testuali su cui effettuare ricerche.

Per definire l’indice ed eseguire una ricerca:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 MongoClient mongo = new MongoClient("localhost",27017);
 DB db = mongo.getDB("persons");
 DBCollection table = db.getCollection("personCollection");
 //creo un indice full text sulla "colonna" name dell'oggetto Person
 table.createIndex(new BasicDBObject("name","text"));
 BasicDBObject search= new BasicDBObject("$search","valori da ricercare separati da spazio");
 BasicDBObject textSearch = new BasicDBObject("$text",search);
 DBCursor cursor = tablefind(textSearch);
 personList = new ArrayList<Person>();
       
 while (cursor.hasNext()){
  DBObject obj = cursor.next();
  Person pers = (new Gson()).fromJson(obj.toString(), Person.class);
  personList.add(pers);
 }

Fare attenzione alla versione che si usa di MongoDB perché nelle versioni precedenti la full text search non era abilitata di default.

Interessante la possibilità di ottenere come risultato l’item con il più alto numero di match di parole chiave inserite:

1
2
3
4
  BasicDBObject search= new BasicDBObject("$search","valori da ricercare separati da spazio");
  BasicDBObject textSearch = new BasicDBObject("$text",search);
  BasicDBObject score= new BasicDBObject("score", new BasicDBObject("$meta", "textScore"));
  bestItem= coll.findOne(textSearch, score);

Rispondi