2011-01-04 3 views
0

이것은 MultiField 쿼리Lucene.Net : 어떻게 MultiFiledQueryParser를 BooleanQuery로 변환 할 수 있습니까?

 ''# Variables used by Lucene 
     Dim reader As IndexReader = IndexReader.Open(luceneDirectory, True) 
     Dim searcher As IndexSearcher = New IndexSearcher(reader) 
     Dim parser As QueryParser = New MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_29, 
                   New String() {"title", 
                      "description", 
                      "region", 
                      "pricelow", 
                      "pricehigh", 
                      "url", 
                      "user", 
                      "location"}, 
                     New StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29)) 
     Dim query As Query = parser.Parse(search.ToLower) 


     ''# We want to ensure that only relevant dates are being returned. 
     Dim nowValue = DateTools.DateToString(DateTime.Now, DateTools.Resolution.DAY) 
     Dim dateFilter = If(searchPast, Nothing, FieldCacheRangeFilter.NewStringRange("filterdate", 
                        lowerVal:=nowValue, 
                        includeLower:=True, 
                        upperVal:=Nothing, 
                        includeUpper:=False)) 


''#============================================================================ 
''# Here's where I also need to add a regionFilter where I have something like 

''# Dim regionFilter = New FieldCacheTermsFilter("region", New String() {HttpContext.Current.Request.Url.Subdomain}) 

''# This is because we must always ONLY ever return search results that are from 
''# HttpContext.Current.Request.Url.Subdomain (where Subdomain is an extension 
''# method that returns the name of the region... much like Kijiji.ca) 
''#============================================================================ 

     Dim topDocs As TopDocs = searcher.Search(query, dateFilter, 1000) 

난 그냥이 일에 대해 이동하는 방법을 잘 모르겠어요 않습니다 내 현재 코드입니다. 부울 쿼리를 수행하고 두 번째 필터를 포함 할 수 있도록 어떻게 변경할 수 있습니까?

참고 : 나는 아직도

사용자처럼 필드를 검색 할 수 있어야합니다 : 사용자 이름
위치 : 독일
를 등 내가 전에 엄격 부울 쿼리를 시도하고 내가 할 수있는

위의 검색어를 사용하지 마세요. 내가 어디로 잘못 갔는지 모르겠다.

답변

0

대답이

''# Variables used by Lucene 
    Dim reader As IndexReader = IndexReader.Open(luceneDirectory, True) 
    Dim searcher As IndexSearcher = New IndexSearcher(reader) 
    Dim parser As QueryParser = New MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_29, 
                  New String() {"title", 
                     "description", 
                     "region", 
                     "pricelow", 
                     "pricehigh", 
                     "url", 
                     "user", 
                     "location"}, 
                    New StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29)) 
    Dim query As Query = parser.Parse(search.ToLower) 

    Dim nowValue = DateTools.DateToString(DateTime.Now, DateTools.Resolution.DAY) 
    Dim dateFilter = If(searchPast, Nothing, FieldCacheRangeFilter.NewStringRange("filterdate", 
                        lowerVal:=nowValue, 
                        includeLower:=True, 
                        upperVal:=Nothing, 
                        includeUpper:=False)) 


     ''# Here's where the extra filtering magic happens 
     ''# First we add the original query to the boolean query 
     ''# Then we add another "MUST" query that says that region has to = Subdomain 
     Dim bquery = New BooleanQuery 
     bquery.Add(query, BooleanClause.Occur.MUST) 
     bquery.Add(New TermQuery(New Term("region", HttpContext.Current.Request.Url.Subdomain)), BooleanClause.Occur.MUST) 

     Dim topDocs As TopDocs = searcher.Search(bquery, dateFilter, 1000) 
보이는 것처럼 나타납니다
관련 문제