Hi Sanne,
Thanks a lot for the detailed response!
First of all, sorry my example "schema" wasn't explained clearly.
By enrollment I meant "number of students at that college".
I actually had no concept of "course/program" in the schema (and I guess that's what you understood as "enrollment").
Quote:
To understand what it can not solve, you have to understand the way objects are mapped to the index: every possible "hit" of a query needs to match a single Document in the index.
you can't co-relate values from different fields.
assuming you allow your students to be registered in multiple colleges
you CAN search for: "students with some name, studying some kind of enrollment at college A, B or C"
you CAN NOT search for: "students with some name, enrolling on X at college B" as, the X would match as well if it was studied at college C for the same student.
What exactly do you mean by co-relate?
Does that mean that queries can express an _OR_ operator but not an _AND_, i.e. "course X _AND_ college B" is not possible?
Also, did you mean the following?
you CAN search for "students with ANY name; studying ANY enrollment/course; at college A, B or C"
you CAN NOT search for, "students ANY name, studying EXACTLY enrollment X; at college EXACTLY B"
Quote:
Generally you can map any schema to any index without significant performance impact. The main difference to consider is that Lucene operations don't allow for partial updates, so if your student changes name, you'll have to load college and enrollment to reindex the whole relation; if you're really extreme on performance you might want to load the needed graph in a fetch join, or optimize the schema for it, but I think that's really far fetched since most operations would likely not change these values
My question was more about expressiveness than performance (at this stage anyway).
From your answer I understood that any SCHEMA-to-INDEX mapping is functionally possible. Great.
FYI, the application will be very read heavy (at first), so I don't mind sacrificing write performance if it's not drastic.
Quote:
A 2nd level cache would be more effective anyway (and good to have even if you don't use Search)
What do you mean by a 2nd level cache?
My understanding was that HibernateSearch would allow me to place the entire Search index in RAM (assuming sufficient RAM).
Is that not the case?
Can a caching layer be enabled in the Hibernate/HibernateSearch configuration, or are you thinking more along the lines of a product like Memcached?
Thanks again,
Alex