2011-06-08 38 views
0

我有一個lucene搜索,我試圖用LanguageIds過濾搜索,但我無法做到這一點。我傳遞的是我的語言類似「1,2,3」,但它沒有正確過濾,它唯一的取值爲languageIds「1,2,3」。但我希望結果具有「1」,「1,2」,「1,3」,「1,2,3」的languageIds。任何機構可以告訴我如何在Lucene.net中爲單個termQuery傳遞多個值?如何用2個值過濾Lucene搜索字段?

笏到目前爲止,我所做的就是

  if (languagelds.Contains(",")) 
      { 
       List<String> languageld = languagelds.Trim().Split(',').ToList(); 
       languageld.ForEach(lid => 
       { 
        TermQuery languageQuery = new TermQuery(new Term("resourceLanguageIds", lid)); 
        filterQuery.Add(languageQuery, BooleanClause.Occur.MUST); 
       }); 
      } 
      else 
      { 
       TermQuery languageQuery = new TermQuery(new Term("resourceLanguageIds", languagelds)); 
       filterQuery.Add(languageQuery, BooleanClause.Occur.MUST); 
      } 


     filterQuery.Add(productQuery, BooleanClause.Occur.MUST); 
     Filter filter = new CachingWrapperFilter(new QueryWrapperFilter(filterQuery)); 
     TopScoreDocCollector collector = TopScoreDocCollector.create(100, true); 
     Hits hits = null; 
     if (sortField != "Rank") 
     { 
      hits = indexSearch.Search(searchQuery, filter, sort); 
      indexSearch.SetDefaultFieldSortScoring(true, true); 
     } 
     else 
     { 
      hits = indexSearch.Search(searchQuery, filter); 
     } 

回答

1

你可以嘗試多次添加相同的字段建立索引時像

doc.Add(new Field(resourceLanguageId,"1"... 

doc.Add(new Field(resourceLanguageId,"2"... 

doc.Add(new Field(resourceLanguageId,"3"... 
+0

是否有其他方法從搜索方面來篩選未做任何索引的變化? – 2011-06-09 08:54:01

+0

嘗試搜索「1」和「1,*」,具體取決於您存儲該字段的方式。這不是最好的解決方案,你應該遵循Anon的建議 – KinSlayerUY 2013-04-15 13:34:33