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:domur...@yahoo.co.uk]
>> Sent: Thursday, July 30, 2009 3:10 PM
>> To: java-user@lucene.apache.org
>> 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: java-user-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-user-h...@lucene.apache.org

Reply via email to