Thanks Steven,
I guess the index structure that I need in order to perform my query is:
<doc id='1'>
<field name='courseName'>
<val>cooking</val>
<field name='mandatory'>
<val>N</val>
</field>
</field>
<field name='courseName'>
<val>art</val>
<field name='mandatory'>
<val>Y</val>
</field>
<field name='name'>
<val>Bob</val>
</field>
</doc>
But I'm not sure how to map my domain classes in order to achieve this (or
even if it's possible)
Steven A Rowe wrote:
>
> Hi Donal,
>
> I looked at the XML index dump you provided, and I can see that there is
> only one document in the index. This document matches your query. I've
> pasted it below, without the "$/*"-named fields I'm assuming Compass adds
> to manage Lucene document -> Grails object mapping, and with just the
> "name" attribute on the field elements:
>
> <doc id='1'>
> <field name='courseName'>
> <val>cooking</val>
> <val>art</val>
> </field>
> <field name='mandatory'>
> <val>N</val>
> <val>Y</val>
> </field>
> <field name='name'>
> <val>Bob</val>
> </field>
> </doc>
>
> Compass's Lucene document to Grails object mapping is your problem here.
>
> In Lucene-land, the query (+courseName:cooking +mandatory:Y) matches the
> above document, because the document contains those values in those
> fields.
>
> So with that query, based on the Lucene document structure, you seem to be
> asking the question: "Which student attends a cooking course and also
> attends a mandatory course?". Bob is a match.
>
> Steve
>
>> -----Original Message-----
>> From: Donal Murtagh [mailto:[email protected]]
>> Sent: Thursday, July 30, 2009 3:10 PM
>> To: [email protected]
>> Subject: Re: Querying across object relationships
>>
>> Basically the classes I'm indexing have the following relationships:
>>
>> Student 1------* Attendance 1------* Course
>>
>> The
>> only root class is Student, i.e. only instances of this class can be
>> returned from a search. I have a Student object graph that could be
>> represented in JSON as follows:
>>
>> {
>> name: Bob,
>> attendances: [
>> {mandatory: N, course: {name: cooking}},
>> {mandatory: Y, course: {name: art}}]
>> }
>>
>> When I search for an instance of Student using the query:
>>
>> "+courseName:cooking +mandatory:Y"
>>
>> Bob
>> is returned because, because he attends a course named "cooking" and he
>> attends a mandatory course (named "art).. But what I really want to
>> search for is students that attend a mandatory cooking course. It
>> doesn't appear to be possible to do this based on the responses
>> provided here:
>> http://stackoverflow.com/questions/1202422/lucene-query-
>> syntax/1203186#1203186
>>
>> I
>> opened the Student index in Luke, exported it to XML and have appended
>> the results here:
>> http://pastebin.com/m6e5bbcf3
>>
>> I don't really know how to interpret this
>> myself, but thanks in advance for any further help you can provide.
>>
>> - Don
>>
>>
>>
>>
>
>
--
View this message in context:
http://www.nabble.com/Querying-across-object-relationships-tp24727196p24747745.html
Sent from the Lucene - Java Users mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]