Martin -
I have to admit to still being unsure what the gist is here - is there a bug?
Apologies for not catching what you’re saying/showing here. Again, as far as I
can tell SpanPayloadCheckQuery is working as expected now.
I’m going to focus purely on SOLR-1485 this week to get it committed for 6.6.
If there is an issue to address with your work would you please open a JIRA and
include your patch there?
Thanks,
Erik
> On Apr 30, 2017, at 7:47 AM, Martin Gainty <[email protected]> wrote:
>
> 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.
>>
>> TestPayloadCheckQuery.java
>> <https://1drv.ms/u/s!AkpuiYcNg4cSgWRHc6DadiCIYaFN>
>> <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
>>>> <https://issues.apache.org/jira/browse/SOLR-629>
>>>>
>>>> wunder
>>>> Walter Underwood
>>>> [email protected] <mailto:[email protected]>
>>>> http://observer.wunderwood.org/ <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