2011-06-08 83 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