lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Erick Erickson <erickerick...@gmail.com>
Subject Re: Assert / NPE using MultiFieldQueryParser
Date Mon, 25 Mar 2013 18:19:40 GMT
@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
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message