I think you are right.  BiaradaCacheManager.GetSiteProductQueryParser(); is
static class. I convert it to dynamic version. I will see the result in an
hour.
Thanks,

>
>

2010/11/8 Ben Martz <[email protected]>

> Is your code written in a thread-safe manner? I am immediately suspicious
> when I see something like:
>
> QueryParser parser = BiaradaCacheManager.GetSiteProductQueryParser();
>
> What type of functionality are your various BiaradaCacheManager methods
> providing in terms of object reuse?
>
> Just an idea since I've done extensive multi-thread stress testing on my
> product and never encountered such an issue.
>
> Cheers,
> Ben
>
>
> biarada com wrote:
>
>> Hi,
>> I am using lucene for my site, however in these days my site get very
>> popular. when request amount get 10 or above in a second, some case (I
>> dont
>> know when it is happenig ) the lucene parser get the following error. But
>> when I try to execute lucene again it works fine. could you help me why it
>> happens.
>> Regards,
>>
>> Yilmaz Saridemir.
>> Error:
>>
>> Cannot parse '(lcd tv) AND HasExpired:0  AND SortByPrice:{0000000 TO
>> 0084699}': Encountered " ")" ") "" at line 1, column 11.
>> Was expecting one of:
>>     <EOF>
>>     <AND>  ...
>>     <OR>  ...
>>     <NOT>  ...
>>     "+" ...
>>     "-" ...
>>     "(" ...
>>     "*" ...
>>     "^" ...
>>     <QUOTED>  ...
>>     <TERM>  ...
>>     <FUZZY_SLOP>  ...
>>     <PREFIXTERM>  ...
>>     <WILDTERM>  ...
>>     "[" ...
>>     "{" ...
>>     <NUMBER>  ...
>>
>>
>>
>>
>>
>> My code :
>>
>>         public SearchResponseInfoWcf SearchWcf(int productId)
>>         {
>>             SearchResponseInfoWcf info = new SearchResponseInfoWcf();
>>             try
>>             {
>>                 MultiSearcher allSearcher =
>> BiaradaCacheManager.GetAllMultiSearcher();
>>                 QueryParser parser =
>> BiaradaCacheManager.GetSiteProductQueryParser();
>>                 Query query = parser.Parse(productId.ToString());
>>                 TopDocs docs = allSearcher.Search(query, 1);
>>                 if (docs.scoreDocs.Length>  0)
>>                 {
>>                     Dictionary<int, ProductInfoWcf>  products = new
>> Dictionary<int, ProductInfoWcf>();
>>                     Document doc = allSearcher.Doc(docs.scoreDocs[0].doc);
>>                     ProductInfoWcf p = LoadProductInfo(products, doc,
>> docs.scoreDocs[0].score);
>>                     BiaradaDataManager.FillProductInfoData(products,
>> productId.ToString());
>>                     info.ProductIdInfo = p;
>>                     string[] matchs = GetMatchedProducts(doc);
>>                     if (matchs.Length>  0)
>>                     {
>>                         if (matchs[0] != "" || matchs.Length>  1)
>>                         {
>>                             BooleanQuery matchedAllQuery = new
>> BooleanQuery();
>>                             for (int i = 0; i<  matchs.Length; i++)
>>                             {
>>
>>                                 if (matchs[i].Length>  0)
>>                                 {
>>                                     Query matchedQuery = new
>> WildcardQuery(new Term("MatcheId", "*," + matchs[i] + ",*"));  //#1
>>                                     matchedAllQuery.Add(matchedQuery,
>> BooleanClause.Occur.SHOULD);
>>                                 }
>>                             }
>>                             //Query hasExpiredQuery = new
>> WildcardQuery(new
>> Term("HasExpired", "0"));  //#1
>>                             //matchedAllQuery.Add(hasExpiredQuery,
>> BooleanClause.Occur.MUST);
>>                             //Query matchedQuery = parser.Parse( "(" +
>> sb.ToString() + ") AND HasExpired:0 ");
>>                             BooleanQuery filterBoolenQuery = new
>> BooleanQuery();
>>                             filterBoolenQuery.Add(new TermQuery(new
>> Term("HasExpired", "0")), BooleanClause.Occur.MUST);
>>                             filterBoolenQuery.Add(new TermQuery(new
>> Term("SortByPrice", WcfConfigManager.MinPrice)),
>> BooleanClause.Occur.MUST_NOT);
>>                             Filter filter = new
>> QueryWrapperFilter(filterBoolenQuery);
>>
>>                             Sort matchSort = new
>> Sort(GetSortField(SortingTypes.PriceAsc));
>>                             //Console.WriteLine(DateTime.Now.Millisecond);
>>                             MultiSearcher searcher =
>> BiaradaCacheManager.GetMultiSearcher();
>>                             TopDocs matchedDocs =
>> searcher.Search(matchedAllQuery, filter,
>> ConfigManager.MaxMatchedProductCount, matchSort);
>>                             //Console.WriteLine(DateTime.Now.Millisecond);
>>                             StringBuilder sbMatched = new StringBuilder();
>>                             sbMatched.Append("0");
>>                             for (int i = 0; i<  matchedDocs.totalHits&&
>>  i<
>> ConfigManager.MaxMatchedProductCount; i++)
>>                             {
>>                                 Document docMatched =
>> searcher.Doc(matchedDocs.scoreDocs[i].doc);
>>                                 ProductInfoWcf pMatched =
>> LoadProductInfo(info.ReletedInfos, docMatched,
>> matchedDocs.scoreDocs[i].score);
>>                                 sbMatched.Append(",");
>>                                 sbMatched.Append(pMatched.ProductId);
>>                             }
>>
>> BiaradaDataManager.FillProductInfoData(info.ReletedInfos,
>> sbMatched.ToString());
>>                         }
>>                     }
>>                 }
>>             }
>>             catch (Exception _e)
>>             {
>>
>>             }
>>             int hasError = 0;
>>             if (info.SearchInfos == null)
>>             {
>>                 info.SearchInfos = new Dictionary<int, ProductInfoWcf>();
>>                 hasError = 1;
>>             }
>>             if (info.AdvInfos == null)
>>             {
>>                 info.AdvInfos = new Dictionary<int, ProductInfoWcf>();
>>                 hasError += 2;
>>             }
>>             if (info.ProductIdInfo== null)
>>             {
>>                 info.ProductIdInfo = new ProductInfoWcf();
>>                 hasError += 4;
>>             }
>>             else if (info.ProductIdInfo.Name == null)
>>             {
>>                 info.ProductIdInfo.Name  = "biarada";
>>                 hasError += 8;
>>             }
>>             if (info.ReletedInfos== null)
>>             {
>>                 info.ReletedInfos = new Dictionary<int, ProductInfoWcf>();
>>                 hasError += 16;
>>             }
>>             if (hasError>  0)
>>             {
>>
>>             }
>>
>>             return info;
>>         }
>>
>>

Reply via email to