Tôi đã có người tìm kiếm của tôi làm việc thực sự tốt, tuy nhiên nó có xu hướng trả về kết quả đã lỗi thời. Trang web của tôi giống NerdDinner theo đó các sự kiện trong quá khứ trở nên không liên quan.Lucene.Net: Làm cách nào để thêm bộ lọc ngày vào kết quả tìm kiếm của tôi?
tôi đang lập chỉ mục như
ghi chú này: ví dụ của tôi là trong VB.NET, nhưng tôi không quan tâm nếu ví dụ được đưa ra trong C#
Public Function AddIndex(ByVal searchableEvent As [Event]) As Boolean Implements ILuceneService.AddIndex
Dim writer As New IndexWriter(luceneDirectory, New StandardAnalyzer(), False)
Dim doc As Document = New Document
doc.Add(New Field("id", searchableEvent.ID, Field.Store.YES, Field.Index.UN_TOKENIZED))
doc.Add(New Field("fullText", FullTextBuilder(searchableEvent), Field.Store.YES, Field.Index.TOKENIZED))
doc.Add(New Field("user", If(searchableEvent.User.UserName = Nothing,
"User" & searchableEvent.User.ID,
searchableEvent.User.UserName),
Field.Store.YES,
Field.Index.TOKENIZED))
doc.Add(New Field("title", searchableEvent.Title, Field.Store.YES, Field.Index.TOKENIZED))
doc.Add(New Field("location", searchableEvent.Location.Name, Field.Store.YES, Field.Index.TOKENIZED))
doc.Add(New Field("date", searchableEvent.EventDate, Field.Store.YES, Field.Index.UN_TOKENIZED))
writer.AddDocument(doc)
writer.Optimize()
writer.Close()
Return True
End Function
Chú ý làm thế nào tôi có một " ngày "chỉ mục lưu trữ ngày sự kiện.
tìm kiếm của tôi sau đó trông như thế này
''# code omitted
Dim reader As IndexReader = IndexReader.Open(luceneDirectory)
Dim searcher As IndexSearcher = New IndexSearcher(reader)
Dim parser As QueryParser = New QueryParser("fullText", New StandardAnalyzer())
Dim query As Query = parser.Parse(q.ToLower)
''# We're using 10,000 as the maximum number of results to return
''# because I have a feeling that we'll never reach that full amount
''# anyways. And if we do, who in their right mind is going to page
''# through all of the results?
Dim topDocs As TopDocs = searcher.Search(query, Nothing, 10000)
Dim doc As Document = Nothing
''# loop through the topDocs and grab the appropriate 10 results based
''# on the submitted page number
While i <= last AndAlso i < topDocs.totalHits
doc = searcher.Doc(topDocs.scoreDocs(i).doc)
IDList.Add(doc.[Get]("id"))
i += 1
End While
''# code omitted
tôi đã thử những điều sau đây, nhưng nó đã không có kết quả (ném một NullReferenceException).
While i <= last AndAlso i < topDocs.totalHits
If Date.Parse(doc.[Get]("date")) >= Date.Today Then
doc = searcher.Doc(topDocs.scoreDocs(i).doc)
IDList.Add(doc.[Get]("id"))
i += 1
End If
End While
Tôi cũng tìm thấy các tài liệu sau đây, nhưng tôi không thể làm cho người đứng đầu hoặc đuôi của nó
http://lucene.apache.org/java/1_4_3/api/org/apache/lucene/search/DateFilter.html
Ok, tôi nghĩ bạn đã thêm lại mvc. Vì vậy, ok của bạn với một ví dụ IronPython hoặc IronRuby? ;) – jfar
:-p [uh đó là prolly đẩy nó] –