Wrapper to allow SpanQuery objects participate in composite
single-field SpanQueries by 'lying' about their search field. That is,
the masked SpanQuery will function as normal,
but SpanQuery.getField() simply hands back the value supplied
in this class's constructor.
This can be used to support Queries like SpanNearQuery or
SpanOrQuery across different fields, which is not ordinarily
permitted.
This can be useful for denormalized relational data: for example, when
indexing a document with conceptually many 'children':
teacherid: 1
studentfirstname: james
studentsurname: jones
teacherid: 2
studenfirstname: james
studentsurname: smith
studentfirstname: sally
studentsurname: jones
a SpanNearQuery with a slop of 0 can be applied across two
SpanTermQuery objects as follows:
SpanQuery q1 = new SpanTermQuery(new Term("studentfirstname", "james"));
SpanQuery q2 = new SpanTermQuery(new Term("studentsurname", "jones"));
SpanQuery q2m new FieldMaskingSpanQuery(q2, "studentfirstname");
Query q = new SpanNearQuery(new SpanQuery[]{q1, q2m}, -1, false);
to search for 'studentfirstname:james studentsurname:jones' and find
teacherid 1 without matching teacherid 2 (which has a 'james' in position 0
and 'jones' in position 1).
Note: as getField() returns the masked field, scoring will be
done using the norms of the field name supplied. This may lead to unexpected
scoring behaviour.
Copyright: (c) 2004-2006 Mayo Foundation for Medical Education and Research (MFMER). All rights reserved. MAYO, MAYO CLINIC, and the triple-shield Mayo logo are trademarks and service marks of MFMER.