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