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)

Просто не съм сигурен как да направя това. Как мога да го променя, така че да мога да направя булева заявка и да включа втори филтър?

Забележка: Все още трябва да мога да търся в полета като

потребител:потребителско име
местоположение:германия
и т.н

Опитах строго булева заявка преди и не можах да използвам горните думи за търсене. Не съм сигурен къде сбърках.


person Chase Florell    schedule 04.01.2011    source източник


Отговори (1)


Изглежда, че отговорът изглежда така

    ''# 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)
person Chase Florell    schedule 04.01.2011