Lucene.Net小实例 VB.NET

Imports Lucene.Net.Analysis.Standard
Imports Lucene.Net.Analysis
Imports Lucene.Net.Index
Imports Lucene.Net.Documents
Imports System.IO
Imports Lucene.Net.Search
Imports Lucene.Net.QueryParsers


Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'Dim str As String = "我们是中国人; 我们 是 人;we are chiness; 172.16.34.172;youpeizun@126.com;#$*;85*34;58 69"
        'Response.Write(Me.TestStandardTokenizer(str))
    End Sub

    Private Function TestStandardTokenizer(ByVal text As String) As String
        Dim result As String = ""
        Dim tr As TextReader = New StringReader(text)
        Dim st As StandardTokenizer = New StandardTokenizer(tr)
        While (Not st.Next() Is Nothing)
            result = result & st.token.ToString() & "/ "
        End While
        Return result
    End Function
   
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim INDEX_STORE_PATH As String = Server.MapPath("Index")
        Dim INDEX_PATH As String = TextBox1.Text

        Dim writer As IndexWriter
        writer = New IndexWriter(INDEX_STORE_PATH, New StandardAnalyzer(), True)

        IndexDirectory(writer, New FileInfo(INDEX_PATH))
        writer.Optimize()
        writer.Close()

        TextBox2.Text = "提示:索引完成\n"


    End Sub

    Private Sub IndexDirectory(ByVal writer As IndexWriter, ByVal file As FileInfo)
        If Directory.Exists(file.FullName) Then
            Dim files As String() = Directory.GetFileSystemEntries(file.FullName)
            If Not files Is Nothing Then
                Dim i As Integer
                For i = 0 To files.Length - 1
                    IndexDirectory(writer, New FileInfo(files(i)))
                Next
            End If
        ElseIf file.Extension = ".txt" Then
            IndexFile(file, writer)
        End If
    End Sub

    Private Sub IndexFile(ByVal file As FileInfo, ByVal writer As IndexWriter)
        Dim doc As Document = New Document()
        doc.Add(New Field("filename", file.FullName, Field.Store.YES, Field.Index.UN_TOKENIZED))
        doc.Add(New Field("contents", New StreamReader(file.FullName, System.Text.Encoding.Default)))
        writer.AddDocument(doc)
    End Sub

    Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim INDEX_STORE_PATH As String = Server.MapPath("index")   'INDEX_STORE_PATH 为索引存储目录
        Dim KEYWORD As String = TextBox2.Text '搜索关键字

        Dim searcher As IndexSearcher
        searcher = New IndexSearcher(INDEX_STORE_PATH)

        Dim q As QueryParser = New QueryParser("contents", New StandardAnalyzer())
        Dim query As Query = q.Parse(KEYWORD)

        Dim hits As Hits = searcher.Search(query)
        TextBox3.Text = "Results number is " & hits.Length()

        If Not hits Is Nothing Then
            Dim i As Integer
            For i = 0 To hits.Length - 1
                Dim doc As Document = hits.Doc(i)
                TextBox3.Text = TextBox3.Text & " 第" & i & "个结果地址" & doc.Get("filename") & "\n"
            Next
        End If
        searcher.Close()

    End Sub
End Class

posted @ 2009-07-13 02:21  waynecn  阅读(576)  评论(0编辑  收藏  举报