lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Simon Willnauer <simon.willna...@gmail.com>
Subject Re: Assert / NPE using MultiFieldQueryParser
Date Mon, 25 Mar 2013 18:31:56 GMT
you know, a lot of what we do is pressing buttons ;) But luckily not
everything.

simon

On Mon, Mar 25, 2013 at 7:19 PM, Erick Erickson <erickerickson@gmail.com> wrote:
> @Simon
>
> did I actually catch a reference to: http://xkcd.com/722/
> ??? that's one of my all-time favorites on XKCD, I think it
> describes my entire professional life....
>
> "Bobby Tables" is another (http://xkcd.com/327/).....
>
> There, I've done my bit to stop productivity today!
>
> Erick
>
>
> On Mon, Mar 25, 2013 at 2:08 PM, Simon Willnauer <simon.willnauer@gmail.com>
> wrote:
>>
>> adam, thanks for opening it and reporting the bug! Very much
>> appreciated and definitely 50% of the work. I just pressed buttons
>> until tests passed!
>>
>> simon
>>
>> On Mon, Mar 25, 2013 at 5:37 PM, Adam Rauch <adam@labkey.com> wrote:
>> > Thanks, Simon.  You've obviously seen (and fixed!) the issue already,
>> > but for the record: https://issues.apache.org/jira/browse/LUCENE-4878
>> >
>> > Adam
>> >
>> > -----Original Message-----
>> > From: Simon Willnauer [mailto:simon.willnauer@gmail.com]
>> > Sent: Sunday, March 24, 2013 9:28 AM
>> > To: java-user@lucene.apache.org
>> > Subject: Re: Assert / NPE using MultiFieldQueryParser
>> >
>> > Hey,
>> >
>> > this is in-fact a bug in the MultiFieldQueryParser, can you open a
>> > ticket for this please in our bugtracker?
>> >
>> > MultifieldQueryParser should override getRegexpQuery but it doesn't
>> >
>> > simon
>> >
>> > On Sun, Mar 24, 2013 at 3:57 PM, Adam Rauch <adam@labkey.com> wrote:
>> >> I'm using MultiFieldQueryParser to parse search queries.  I find that
>> >> certain query strings (e.g., "/study/" without the quotes) cause
>> >> MultiFieldQueryParser.parse() to throw an AssertionError, if asserts
>> >> are enabled.  In production, parse() returns a Query, but it seems to
>> >> be corrupt. using it to search my index results in an NPE.  This seems
>> >> related to regular expressions.  That query string is probably invalid
>> >> regex syntax.
>> >> but shouldn't MultiFieldQueryParser to throw a ParseException in this
>> >> case?
>> >>
>> >>
>> >>
>> >> Here's a simple example that reproduces the assertion:
>> >>
>> >>
>> >>
>> >>         // Turn on asserts
>> >>
>> >>         ClassLoader loader = ClassLoader.getSystemClassLoader();
>> >>
>> >>         loader.setDefaultAssertionStatus(true);
>> >>
>> >>
>> >>
>> >>         try
>> >>
>> >>         {
>> >>
>> >>             Analyzer analyzer = new
>> >> WhitespaceAnalyzer(Version.LUCENE_41);
>> >>
>> >>             QueryParser parser = new
>> >> MultiFieldQueryParser(Version.LUCENE_41, new String[]{"title",
>> >> "body"}, analyzer);
>> >>
>> >>             Query query = parser.parse("/study/");
>> >>
>> >>         }
>> >>
>> >>         catch (ParseException e)
>> >>
>> >>         {
>> >>
>> >>             System.out.println("Syntax error, please rephrase your
>> >> query");
>> >>
>> >>         }
>> >>
>> >>
>> >>
>> >> This produces:
>> >>
>> >>
>> >>
>> >> Exception in thread "main" java.lang.AssertionError
>> >>
>> >>                 at
>> >> org.apache.lucene.search.MultiTermQuery.<init>(MultiTermQuery.java:252
>> >> )
>> >>
>> >>                 at
>> >> org.apache.lucene.search.AutomatonQuery.<init>(AutomatonQuery.java:65)
>> >>
>> >>                 at
>> >> org.apache.lucene.search.RegexpQuery.<init>(RegexpQuery.java:90)
>> >>
>> >>                 at
>> >> org.apache.lucene.search.RegexpQuery.<init>(RegexpQuery.java:79)
>> >>
>> >>                 at
>> >> org.apache.lucene.search.RegexpQuery.<init>(RegexpQuery.java:69)
>> >>
>> >>                 at
>> >> org.apache.lucene.queryparser.classic.QueryParserBase.newRegexpQuery(Q
>> >> ueryPa
>> >> rserBase.java:790)
>> >>
>> >>                 at
>> >> org.apache.lucene.queryparser.classic.QueryParserBase.getRegexpQuery(Q
>> >> ueryPa
>> >> rserBase.java:1005)
>> >>
>> >>                 at
>> >> org.apache.lucene.queryparser.classic.QueryParserBase.handleBareTokenQ
>> >> uery(Q
>> >> ueryParserBase.java:1075)
>> >>
>> >>                 at
>> >> org.apache.lucene.queryparser.classic.QueryParser.Term(QueryParser.jav
>> >> a:359)
>> >>
>> >>                 at
>> >> org.apache.lucene.queryparser.classic.QueryParser.Clause(QueryParser.j
>> >> ava:25
>> >> 8)
>> >>
>> >>                 at
>> >> org.apache.lucene.queryparser.classic.QueryParser.Query(QueryParser.ja
>> >> va:182
>> >> )
>> >>
>> >>                 at
>> >>
>> >> org.apache.lucene.queryparser.classic.QueryParser.TopLevelQuery(QueryParser.
>> >> java:171)
>> >>
>> >>                 at
>> >>
>> >> org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.
>> >> java:120)
>> >>
>> >>                 at
>> >> QueryParserException.main(QueryParserException.java:21)
>> >>
>> >>
>> >>
>> >> Turn off the asserts and parse() returns "successfully". but
>> >> subsequent use of that Query instance results in NPEs such as:
>> >>
>> >>
>> >>
>> >> java.lang.NullPointerException
>> >>
>> >>                 at java.util.TreeMap.getEntry(TreeMap.java:342)
>> >>
>> >>                 at java.util.TreeMap.get(TreeMap.java:273)
>> >>
>> >>                 at
>> >> org.apache.lucene.codecs.perfield.PerFieldPostingsFormat$FieldsReader.
>> >> terms(
>> >> PerFieldPostingsFormat.java:215)
>> >>
>> >>                 at
>> >> org.apache.lucene.search.TermCollectingRewrite.collectTerms(TermCollec
>> >> tingRe
>> >> write.java:58)
>> >>
>> >>                 at
>> >> org.apache.lucene.search.ConstantScoreAutoRewrite.rewrite(ConstantScor
>> >> eAutoR
>> >> ewrite.java:95)
>> >>
>> >>                 at
>> >> org.apache.lucene.search.MultiTermQuery$ConstantScoreAutoRewrite.rewri
>> >> te(Mul
>> >> tiTermQuery.java:220)
>> >>
>> >>                 at
>> >> org.apache.lucene.search.MultiTermQuery.rewrite(MultiTermQuery.java:28
>> >> 6)
>> >>
>> >>                 at
>> >> org.apache.lucene.search.BooleanQuery.rewrite(BooleanQuery.java:429)
>> >>
>> >>                 at
>> >> org.apache.lucene.search.FilteredQuery.rewrite(FilteredQuery.java:334)
>> >>
>> >>                 at
>> >> org.apache.lucene.search.IndexSearcher.rewrite(IndexSearcher.java:616)
>> >>
>> >>                 at
>> >>
>> >> org.apache.lucene.search.IndexSearcher.createNormalizedWeight(IndexSearcher.
>> >> java:663)
>> >>
>> >>                 at
>> >> org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:281)
>> >>
>> >>                 at
>> >> org.labkey.search.model.LuceneSearchServiceImpl.search(LuceneSearchSer
>> >> viceIm
>> >> pl.java:1160)
>> >>
>> >>
>> >>
>> >> This is appearing on production deployments with reasonable (from a
>> >> user's
>> >> perspective) search queries (e.g., "http://labkey.org/study/xml"
>> >> without the quotes).  I'd like to either turn off regex parsing
>> >> altogether or detect the syntax error at parse time so I can provide
>> >> my standard syntax guidance back to the user.
>> >>
>> >>
>> >>
>> >> Thanks,
>> >>
>> >> Adam
>> >>
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
>> > For additional commands, e-mail: java-user-help@lucene.apache.org
>> >
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
>> For additional commands, e-mail: java-user-help@lucene.apache.org
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org


Mime
View raw message