Mornin' Erik
there is a collectLeaf override in
org.apache.lucene.queries.payloads.TestPayloadSpans ..but its never called:
static class VerifyingCollector implements SpanCollector {
List<BytesRef> payloads = new ArrayList<>();
@Override
public void collectLeaf(PostingsEnum postings, int position, Term term)
throws IOException {
....
}
}
the modification in org.apache.lucene.queries.payloads.TestPayloadCheckQuery
tests collectLeaf for query
//initialise term
log.debug("TestPayloadCheckQuery::testSpanPayloadCheck LINE 231 before
term1=new org.apache.lucene.index.Term('field','withPayload')");
org.apache.lucene.index.Term term1=new org.apache.lucene.index.Term("field",
"withPayload");
log.debug("TestPayloadCheckQuery::testSpanPayloadCheck LINE 233 term1="+term1);
//assume position is 5
int position=5;
log.debug("TestPayloadCheckQuery::testSpanPayloadCheck LINE 235
position="+position);
BytesRef pay = new BytesRef("pos: " + position);
log.debug("TestPayloadCheckQuery::testSpanPayloadCheck LINE 237 pay="+pay);
//build spanQuery with term parameter
org.apache.lucene.search.spans.SpanQuery spanQuery1 = new
SpanTermQuery(term1);
log.debug("TestPayloadCheckQuery::testSpanPayloadCheck LINE 239
spanQuery1="+spanQuery1);
//add BytesRef to payloadToMatch list
java.util.List<org.apache.lucene.util.BytesRef> payloadToMatch=new
java.util.ArrayList<org.apache.lucene.util.BytesRef>();
log.debug("TestPayloadCheckQuery::testSpanPayloadCheck LINE 241
payloadToMatch="+payloadToMatch);
payloadToMatch.add(pay);
//build SpanPayloadCheckQuery
query=new org.apache.lucene.queries.payloads.SpanPayloadCheckQuery(
(org.apache.lucene.search.spans.SpanQuery)query,
(java.util.List<org.apache.lucene.util.BytesRef>)payloadToMatch);
log.debug("TestPayloadCheckQuery::testSpanPayloadCheck LINE 249 query="+query);
//build lucene Directory (TODO: we should use an existing directory with REAL
test-data)
org.apache.lucene.store.Directory ram =
newDirectory(com.carrotsearch.randomizedtesting.RandomizedContext.current().getRandom());
//build SegmentReader from Directory
log.debug("TestPayloadCheckQuery::testSpanPayloadCheck LINE 251 ram="+ram);
SegmentReader reader =
getOnlySegmentReader(org.apache.lucene.index.DirectoryReader.open(ram));
log.debug("TestPayloadCheckQuery::testSpanPayloadCheck LINE 253
reader="+reader);
//populate SlowCompositeReaderWrapper with SegmentReader
org.apache.lucene.index.LeafReader sr =
org.apache.lucene.index.SlowCompositeReaderWrapper.wrap(reader);
log.debug("TestPayloadCheckQuery::testSpanPayloadCheck LINE 255 sr="+sr);
//add term to SegmentReader postings
org.apache.lucene.index.PostingsEnum postings = sr.postings(term1,
PostingsEnum.PAYLOADS);
log.debug("TestPayloadCheckQuery::testSpanPayloadCheck LINE 257 before
query.getPayloadChecker().collectLeaf((org.apache.lucene.index.PostingsEnum)postings,
(int)position,(org.apache.lucene.index.Term)term1) where postings="+postings);
//display the parameters for collectLeaf method for query:
log.debug("TestPayloadCheckQuery::testSpanPayloadCheck LINE 258 before
query.getPayloadChecker().collectLeaf((org.apache.lucene.index.PostingsEnum)postings,
(int)position,(org.apache.lucene.index.Term)term1) where position="+position);
log.debug("TestPayloadCheckQuery::testSpanPayloadCheck LINE 259 before
query.getPayloadChecker().collectLeaf((org.apache.lucene.index.PostingsEnum)postings,
(int)position,(org.apache.lucene.index.Term)term1) where term1="+term1);
try
{ //public void collectLeaf(org.apache.lucene.index.PostingsEnum postings,
int position, //org.apache.lucene.index.Term term) throws
java.io.IOException {
query.getPayloadChecker().collectLeaf((org.apache.lucene.index.PostingsEnum)postings,
(int)position,(org.apache.lucene.index.Term)term1);
}
catch(java.io.IOException ioe) {
log.debug("TestPayloadCheckQuery::testSpanPayloadCheck LINE 264
query.getPayloadChecker().collectLeaf((org.apache.lucene.index.PostingsEnum)postings,
(int)position,(org.apache.lucene.index.Term)term1) LINE 106 throws IOException
="+ioe.getMessage()); }
collectLeaf is the only method that compares
matches=payloadToMatch.get(upto).bytesEquals(payload)
to determine "match"
unless of course match between individual payload and payloadToMatch is tested
elsewhere ?
WDYT?
Martin
______________________________________________
________________________________
From: Erik Hatcher <[email protected]>
Sent: Saturday, April 29, 2017 7:58 PM
To: Lucene/Solr dev
Subject: Re: Release 6.6
Martin -
Interesting test but I couldn’t copy/paste it in to try it out as it uses some
logging and APIs that aren’t already in the project and classpath of these
lucene tests within that queries module (within IntelliJ, mind you).
I was able to resolve the misunderstanding (and .equals/.hashCode bugs) so
everything is working as expected with SpanPayloadCheckQuery for me now. Do
your tests point out an issue? Or confirming that it is working properly at a
lower level?
Erik
On Apr 29, 2017, at 9:08 AM, Martin Gainty
<[email protected]<mailto:[email protected]>> wrote:
Martin Gainty has shared a OneDrive file with you. To view it, click the link
below.
<https://1drv.ms/u/s!AkpuiYcNg4cSgWRHc6DadiCIYaFN>
[https://r1.res.office365.com/owa/prem/images/dc-generic_20.png]<https://1drv.ms/u/s!AkpuiYcNg4cSgWRHc6DadiCIYaFN>
TestPayloadCheckQuery.java<https://1drv.ms/u/s!AkpuiYcNg4cSgWRHc6DadiCIYaFN>
attached
I coded this last nite so it is "quick and dirty"
in any case let me know if testSpanPayloadCheck() method modification properly
addresses your situation
Thanks!
Martin
______________________________________________
________________________________
From: Erik Hatcher <[email protected]<mailto:[email protected]>>
Sent: Saturday, April 29, 2017 8:58 AM
To: [email protected]<mailto:[email protected]>
Subject: Re: Release 6.6
Martin - there is a test class specifically for this query. See the recent
commits I've made to test it further fixing .equals/.hashCode and rewrite.
Can you send your full test code?
Erik
On Apr 29, 2017, at 07:32, Martin Gainty
<[email protected]<mailto:[email protected]>> wrote:
when Erik mentioned he couldnt get SpanPayloadCheckQuery to work I was about to
reply just run that TestCase
(until i discovered there wasnt any!)
i'll start the bidding at 1 dinar for TestCase
org.apache.lucene.queries.payloads.TestPayloadCheckQuery mod:
@org.junit.Test
public void testSpanPayloadCheck() throws Exception
//now lets test the collectLeaf for query
//of course calling Base Class SpanPayloadCheckQuery to construct query
log.debug("TestPayloadCheckQuery::testSpanPayloadCheck LINE 257 before
query.getPayloadChecker().collectLeaf((org.apache.lucene.index.PostingsEnum)postings,
(int)position,(org.apache.lucene.index.Term)term1) where postings="+postings);
log.debug("TestPayloadCheckQuery::testSpanPayloadCheck LINE 258 before
query.getPayloadChecker().collectLeaf((org.apache.lucene.index.PostingsEnum)postings,
(int)position,(org.apache.lucene.index.Term)term1) where position="+position);
log.debug("TestPayloadCheckQuery::testSpanPayloadCheck LINE 259 before
query.getPayloadChecker().collectLeaf((org.apache.lucene.index.PostingsEnum)postings,
(int)position,(org.apache.lucene.index.Term)term1) where term1="+term1);
try
{ //test public void collectLeaf(org.apache.lucene.index.PostingsEnum
postings, int position, //org.apache.lucene.index.Term term)
throws java.io.IOException {
query.getPayloadChecker().collectLeaf((org.apache.lucene.index.PostingsEnum)postings,
(int)position,(org.apache.lucene.index.Term)term1);
}
catch(java.io.IOException ioe) {
log.error("TestPayloadCheckQuery::testSpanPayloadCheck LINE 264
query.getPayloadChecker().collectLeaf((org.apache.lucene.index.PostingsEnum)postings,
(int)position,(org.apache.lucene.index.Term)term1) LINE 106 throws IOException
="+ioe.getMessage()); }
unless of course anyone has a better idea to test collectLeaf ?
Martin
______________________________________________
________________________________
From: Erik Hatcher <[email protected]<mailto:[email protected]>>
Sent: Tuesday, April 25, 2017 7:57 PM
To: [email protected]<mailto:[email protected]>
Subject: Re: Release 6.6
Probably no bribe needed, but an updated patch would be a good start (or will
the 2.5 year old patch still apply and be acceptable as-is?)
Erik
On Apr 25, 2017, at 7:52 PM, Walter Underwood
<[email protected]<mailto:[email protected]>> wrote:
Who do I have to bribe to get SOLR-629 included?
https://issues.apache.org/jira/browse/SOLR-629
wunder
Walter Underwood
[email protected]<mailto:[email protected]>
http://observer.wunderwood.org/ (my blog)
On Apr 25, 2017, at 10:46 AM, Ishan Chattopadhyaya
<[email protected]<mailto:[email protected]>> wrote:
Hi,
We have lots of changes, optimizations, bug fixes for 6.6. I'd like to propose
a 6.6 release (perhaps the last 6x non-bug-fix release before 7.0 release).
I can volunteer to release this, and I can cut the release branch around 4th
May, in order to let some time for devs to finish current issues.
What do you think?
Regards,
Ishan