2
我已經得到了下面的方法(例如,從this link拍攝)爲什麼我Lucene.Net「點擊」採集長度返回「0」
Public Function ReadIndex(ByVal q As String, ByVal page As Integer?) As List(Of Domain.[Event]) Implements ILuceneService.ReadIndex
''# This starts us at the first record if the user doesn't have a page specified
If page Is Nothing Then page = 0
Dim i As Integer = page
''# Variables used by Lucene
Dim reader As IndexReader = IndexReader.Open(luceneDirectory)
Dim searcher As IndexSearcher = New IndexSearcher(reader)
Dim query As Query = New TermQuery(New Term("fullText", q.ToLower))
Dim hits As Hits = searcher.Search(query)
Dim ResultIDs As List(Of Integer) = New List(Of Integer)
Dim HC = hits.Length ''# FOR DEBUGGING PURPOSES
While (i <= (page * 10) AndAlso i < hits.Length)
Dim document As Document = hits.Doc(i)
Dim score As Single = hits.Score(i)
ResultIDs.Add(document.[Get]("id"))
i += 1
End While
''# Self explanitory
searcher.Close()
Return EventService.QueryEvents().Where(Function(e) (ResultIDs.Contains(e.ID))).ToList()
End Function
但是,當我設置一個斷點
Dim HC = hits.Length ''# FOR DEBUGGING PURPOSES
和分析在調試器,它總是說有0
的長度,並表示
兒童不能evalua泰德
第一張截圖
第二個屏幕
我不知道這意味着什麼,但是,再查詢的結果總是被返回的單個記錄。即使我知道一個事實,即不止一個人應該被退回。
如果您想閱讀整個服務,請在下方張貼。
Imports System.Web
Imports System.Text
Imports Lucene.Net.Index
Imports Lucene.Net.Search
Imports Lucene.Net.Documents
Imports Lucene.Net.Analysis.Standard
Imports Lucene.Net.Store
Namespace Domain
Public Class LuceneService : Implements ILuceneService
Private luceneDirectory As Directory = FSDirectory.GetDirectory(HttpContext.Current.Server.MapPath("~/App_Data/"), False)
Private ExceptionService As Domain.IExceptionService
Private EventService As Domain.EventService
Sub New()
ExceptionService = New Domain.ExceptionService(New Domain.ExceptionRepository)
EventService = New Domain.EventService(New Domain.EventRepository)
End Sub
Public Function AddIndex(ByVal searchableEvent As [Event]) As Boolean Implements ILuceneService.AddIndex
Dim builder As New StringBuilder
builder.Append(Trim(searchableEvent.Description))
builder.Append(" ")
builder.Append(Trim(searchableEvent.Title))
builder.Append(" ")
builder.Append(Trim(searchableEvent.Location.Name))
builder.Append(" ")
builder.Append(Trim(searchableEvent.Region.Region))
builder.Append(" ")
builder.Append(Trim(searchableEvent.StartDateTime.ToString("yyyy/MM/dd")))
builder.Append(" ")
builder.Append(Trim(searchableEvent.TicketPriceHigh.ToString))
builder.Append(" ")
builder.Append(Trim(searchableEvent.TicketPriceLow.ToString))
builder.Append(" ")
builder.Append(Trim(searchableEvent.URL))
builder.Append(" ")
builder.Append(Trim(searchableEvent.User.UserName))
CreateIndex()
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", builder.ToString, Field.Store.YES, Field.Index.TOKENIZED))
doc.Add(New Field("user", searchableEvent.User.UserName, Field.Store.YES, Field.Index.UN_TOKENIZED))
doc.Add(New Field("location", searchableEvent.Location.Name, Field.Store.YES, Field.Index.UN_TOKENIZED))
doc.Add(New Field("date", searchableEvent.StartDateTime, Field.Store.YES, Field.Index.UN_TOKENIZED))
writer.AddDocument(doc)
writer.Optimize()
writer.Close()
Return True
End Function
Public Function DeleteIndex(ByVal searchableEvent As [Event]) As Boolean Implements ILuceneService.DeleteIndex
Throw New NotImplementedException
End Function
Public Function ReadIndex(ByVal q As String, ByVal page As Integer?) As List(Of Domain.[Event]) Implements ILuceneService.ReadIndex
Dim IDList As List(Of Integer) = New List(Of Integer)
If page Is Nothing Then page = 0
Dim i As Integer = page
''# Variables used by Lucene
Dim reader As IndexReader = IndexReader.Open(luceneDirectory)
Dim searcher As IndexSearcher = New IndexSearcher(reader)
Dim query As Query = New TermQuery(New Term("fullText", q.ToLower))
Dim hits As Hits = searcher.Search(query)
Dim HC = hits.Length ''# For Debugging Purposes
While (i <= (page * 10) AndAlso i < hits.Length())
Dim document As Document = hits.Doc(i)
Dim score As Single = hits.Score(i)
IDList.Add(document.[Get]("id"))
i += 1
End While
''# Self explanitory
searcher.Close()
Return EventService.QueryEvents().Where(Function(e) (IDList.Contains(e.ID))).ToList()
End Function
Public Function UpdateIndex(ByVal searchableEvent As [Event]) As Boolean Implements ILuceneService.UpdateIndex
Throw New NotImplementedException
End Function
Private Sub CreateIndex() Implements ILuceneService.CreateIndex
If Not IndexReader.IndexExists(HttpContext.Current.Server.MapPath("~/App_Data/")) Then
Dim writer As New IndexWriter(HttpContext.Current.Server.MapPath("~/App_Data/"), New StandardAnalyzer(), True)
writer.Close()
End If
End Sub
End Class
End Namespace
什麼是您搜索時「搜索查詢」的示例值? – Justin 2010-12-07 03:04:35
我編輯了問題以刪除該行。我使用簡化版本的查詢得到了相同的結果。 – 2010-12-07 03:25:27