The queryparser it's not thread safe, so you must use a new one in
every request, however, is very lightweight, because the bigger
complexity comes from the underlying analyzer, and this one it's
thread safe.

On 1/12/10, Simone Chiaretta <simone.chiare...@gmail.com> wrote:
> I'm trying to go live with our search engine implementation based on
> Lucene.net.
> Unfortunately we have to keep it inside our appdomain in the web application
> to make it work in shared hosting scenario.
>
> But we are getting quite a few problems, so I was wondering if there are
> some issues with concurrent access:
> 1 - is the QueryParser thread safe? Can I make it one at the beginning of
> the times and reuse it in all my queries? or do I've to create one each
> time?
> I'm asking because I'm getting strange errors like:
>
> ystem.InvalidOperationException: Collection was modified; enumeration
> operation may not execute.     at
> System.Collections.ArrayList.ArrayListEnumeratorSimple.MoveNext()     at
> Lucene.Net.QueryParsers.QueryParser.Jj_add_error_token(Int32 kind, Int32
> pos)     at Lucene.Net.QueryParsers.QueryParser.Jj_scan_token(Int32 kind)
> at Lucene.Net.QueryParsers.QueryParser.Jj_3_1()     at
> Lucene.Net.QueryParsers.QueryParser.Jj_rescan_token()     at
> Lucene.Net.QueryParsers.QueryParser.GenerateParseException()     at
> Lucene.Net.QueryParsers.QueryParser.Jj_consume_token(Int32 kind)     at
> Lucene.Net.QueryParsers.QueryParser.Clause(String field)     at
> Lucene.Net.QueryParsers.QueryParser.Query(String field)     at
> Lucene.Net.QueryParsers.QueryParser.Parse(String query)     at
> Subtext.Framework.Services.SearchEngine.SearchEngineService.Search(String
> queryString, Int32 max, Int32 blogId, Int32 entryId)
>
> Which looks to me like a threading issue.
>
> I also got this one:
>
> Lucene.Net.QueryParsers.QueryParser+LookaheadSuccess: Error in the
> application.
> at Lucene.Net.QueryParsers.QueryParser.Jj_scan_token(Int32 kind)     at
> Lucene.Net.QueryParsers.QueryParser.Jj_3R_2()     at
> Lucene.Net.QueryParsers.QueryParser.Jj_3R_2()     at
> Lucene.Net.QueryParsers.QueryParser.Jj_rescan_token()     at
> Lucene.Net.QueryParsers.QueryParser.Jj_3_1()     at
> Lucene.Net.QueryParsers.QueryParser.GenerateParseException()     at
> Lucene.Net.QueryParsers.QueryParser.Jj_consume_token(Int32 kind)     at
> Lucene.Net.QueryParsers.QueryParser.Jj_consume_token(Int32 kind)     at
> Lucene.Net.QueryParsers.QueryParser.Term(String field)     at
> Lucene.Net.QueryParsers.QueryParser.Clause(String field)     at
> Lucene.Net.QueryParsers.QueryParser.Clause(String field)     at
> Lucene.Net.QueryParsers.QueryParser.Query(String field)     at
> Lucene.Net.QueryParsers.QueryParser.Query(String field)     at
> Lucene.Net.QueryParsers.QueryParser.Parse(String query)     at
> Lucene.Net.QueryParsers.QueryParser.Parse(String query)     at
> Subtext.Framework.Services.SearchEngine.SearchEngineService.Search(String
> queryString, Int32 max, Int32 blogId, Int32 entryId)
>
> And this one:
>
> Lucene.Net.QueryParsers.ParseException: Cannot parse 'what is css
> url': Encountered
> "what is css url" at line 1, column 0. Was expecting one of:     <NOT>
> ...     "+"
> ...     "-" ...     "(" ...     "*" ...     <QUOTED> ...     <TERM> ...
> <PREFIXTERM> ...     <WILDTERM> ...     "[" ...     "{" ...
> <NUMBER> ...
> at Lucene.Net.QueryParsers.QueryParser.Parse(String query)
>
> Which is fine if I really added an invalid character in the query, but "what
> is css url" looks to me like it's a valid query.
>
> What I'm doing is, to avoid creating a new query parser for each query, to
> "cache" the same as variable inside the singleton class that holds the
> search engine.
> Is this a good approach? or a bad one? (I guess bad since this all seem to
> be threading issues).
> Is creating a new query parser for each query a performance problem?
>
> Thank you
> Simone
>
> --
> Simone Chiaretta
> Microsoft MVP ASP.NET - ASPInsider
> Blog: http://codeclimber.net.nz
> RSS: http://feeds2.feedburner.com/codeclimber
> twitter: @simonech
>
> Any sufficiently advanced technology is indistinguishable from magic
> "Life is short, play hard"
>


-- 
Jokin

Reply via email to