http://social.technet.microsoft.com/wiki/contents/articles/2367.how-to-use-lucene-net-with-windows-azure-sql-database.aspx

How to Use Lucene.NET with Windows Azure SQL Database

Summary

Lucene.NET is a .NET implementation of the Lucene full-text search engine. This article describes how you can use Lucene.NET to index text data stored in Windows Azure SQL Database, and then perform searches against that data.
NOTE: This does not provide an integrated full-text search experience like the full-text search in SQL Server. Lucene.NET is an external process that is queried separately from SQL Database.
NOTE: This article relies on the Azure Library for Lucene.NET (https://azuredirectory.codeplex.com/ ) to store the Lucene.NET catalog in a Windows Azure storage blob.
Prerequisites

To use the Azure Library for Lucene.NET and Lucene.NET from a Visual Studio project, you must add a reference to both the AzureDirectory project or assembly, and the Lucerne.NET project or assembly.  You must also add the following using statements to your project: using Lucene.Net; using Lucene.Net.Store; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Documents; using Lucene.Net.Util; using Lucene.Net.Analysis; using Lucene.Net.Analysis.Standard; using Lucene.Net.Search; using Lucene.Net.QueryParsers; using Lucene.Net.Store.Azure;

Lucene.NET

Lucene.NET is a .NET implementation of Lucene (http://lucene.apache.org/ ) and provides full-text indexing and search of documents.  Documents are composed of multiple fields and do not have a predefined schema. When performing a query against the index, you can search across multiple fields within a document. Lucene.NET doesn't directly integrate with SQL Database; instead you must perform a query against a database and construct a Document from the results, which is then cataloged by Lucene.Net.  For more information on Lucene.NET, see http://lucenenet.apache.org/ .

The Azure Library for Lucene.NET

This library allows you to expose blob storage as a Lucene.NET.Store.Directory object, which Lucene.NET uses as persistent storage for its catalog. More information on the Azure Library for Lucene.NET, as well as the latest version, can be found on the project homepage at https://azuredirectory.codeplex.com/ .
The current version of the Azure Library (as of 22 May 2013) may require modification before using it in your solution. Specifically:

  • It may launch a the Visual Studio project conversion wizard when launched.
  • The reference to Microsoft.WindowsAzure.Storage may need to be deleted and recreated to point to the most recent version of the assembly.
  • There are several Debug.WriteLine statements that should be converted to Trace.write or another member of the Trace class as documented at http://msdn.microsoft.com/en-us/library/ff966484.aspx . If you are not interested in diagnostic output, you can simply remove the Debug.WriteLine statements.

Using the Library

The following code creates an AzureDirectory object and uses it as a parameter when creating the IndexWriter:

AzureDirectory azureDirectory = new AzureDirectory(
        CloudStorageAccount.FromConfigurationSetting(
        "Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"), "TestCatalog");
  
IndexWriter indexWriter = new IndexWriter(azureDirectory, new StandardAnalyzer(), true);

Using Lucene.NET to index SQL Database

As mentioned previously, Lucene.NET is not integrated directly with SQL Database and is based on indexing 'documents' that contain multiple fields.  In order to index data from SQL Database, you must query the database and create a new Document object for each row. Individual columns can then be added to the Document. The following code illustrates querying a SQL Database that contains information on individual bloggers, and then adding the ID and Bio column information to the Lucene index using an IndexWriter and Document:

// Create the AzureDirectory against blob storage and create a catalog named 'Catalog'
AzureDirectory azureDirectory= new AzureDirectory(CloudStorageAccount.FromConfigurationSetting("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"), "Catalog");
  
IndexWriter indexWriter = new IndexWriter(azureDirectory, new StandardAnalyzer(), true);
indexWriter.SetRAMBufferSizeMB(10.0);
indexWriter.SetUseCompoundFile(false);
indexWriter.SetMaxMergeDocs(10000);
indexWriter.SetMergeFactor(100);
  
// Create a DataSet and fill it from SQL Database
DataSet ds = new DataSet();
using(SqlConnection sqlCon = new SqlConnection(sqlConnString))
{  
    sqlCon.Open();  
    SqlCommand sqlCmd = new SqlCommand();  
    sqlCmd.Connection = sqlCon;  
    sqlCmd.CommandType = CommandType.Text;  
    // Only get the minimum fields we need; Bio to index, Id so search results
    // can look up the record in SQL Database
    sqlCmd.CommandText = "select Id, Bio from bloggers";  
    SqlDataAdapter sqlAdap = new SqlDataAdapter(sqlCmd);  
    sqlAdap.Fill(ds);  
}  
if (ds.Tables[0] != null)  
{  
    DataTable dt = ds.Tables[0];  
    if (dt.Rows.Count > 0)  
    {  
        foreach (DataRow dr in dt.Rows)  
        {  
            // Create the Document object
            Document doc = new Document();  
            foreach (DataColumn dc in dt.Columns)
            {
                // Populate the document with the column name and value from our query
                doc.Add(new Field(
                       dc.ColumnName, 
                       dr[dc.ColumnName].ToString(), 
                       Field.Store.YES, 
                       Field.Index.TOKENIZED));
            }
            // Write the Document to the catalog
            indexWriter.AddDocument(doc);  
        }  
    }  
}  
// Close the writer
indexWriter.Close();

Note: The above sample returns all rows and adds them to the catalog. In a production application you will most likely only want to add new or updated rows.

Searching the Lucene.NET catalog

After you have added documents to the catalog, you can perform a search against them using the IndexSearcher. The following example illustrates how to create perform a search against the catalog for a term contained in the 'Bio' field and return the Id of that result:

// Create the AzureDirectory for blob storage
AzureDirectory azureDirectory = new AzureDirectory(CloudStorageAccount.FromConfigurationSetting("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"), "Catalog");
// Create the IndexSearcher
IndexSearcher indexSearcher = new IndexSearcher(azureDirectory);
// Create the QueryParser, setting the default search field to 'Bio'
QueryParser parser = new QueryParser("Bio", new StandardAnalyzer());
// Create a query from the Parser
Query query = parser.Parse(searchString);
// Retrieve matching hits 
Hits hits = indexSearcher.Search(query);
// Loop through the matching hits, retrieving the document
for (int i = 0; i < hits.Length(); i++)
{
    //Retrieve the string value of the 'Id' field from the
    //hits.Doc(i) document.
    TextBox_Results.Text += "Id: " + hits.Doc(i).GetField("Id").StringValue()+ "\n";
}

Based on the Id, you can perform a query against SQL Database to return additional fields from the matching record.

References

How to Use Lucene.NET with Windows Azure SQL Database的更多相关文章

  1. [Windows Azure] Guidelines for Connecting to Windows Azure SQL Database

    Guidelines for Connecting to Windows Azure SQL Database 6 out of 12 rated this helpful - Rate this t ...

  2. [Windows Azure] Development Considerations in Windows Azure SQL Database

    Development Considerations in Windows Azure SQL Database 3 out of 5 rated this helpful - Rate this t ...

  3. [Windows Azure] Windows Azure SQL Database library

    Microsoft Windows Azure SQL Database extends SQL Server capabilities to the cloud. SQL Database offe ...

  4. [Windows Azure] Getting Started with Windows Azure SQL Database

    In this tutorial you will learn the fundamentals of Windows Azure SQL Database administration using ...

  5. 使用SQL Database Migration Wizard把SQL Server 2008迁移到Windows Azure SQL Database

    本篇体验使用SQL Database Migration Wizard(SQLAzureMW)将SQL Server 2008数据库迁移到 Azure SQL Database.当然,SQLAzure ...

  6. [转]Azure 表存储和 Windows Azure SQL Database - 比较与对照

    本文转自:https://msdn.microsoft.com/library/azure/jj553018 更新时间: 2014年10月 作者:Valery Mizonov 和 Seth Manhe ...

  7. [Windows Azure] Getting Started with Windows Azure SQL Data Sync

    Getting Started with Windows Azure SQL Data Sync In this tutorial, you learn the fundamentals of Win ...

  8. 使用SSMS 2014将本地数据库迁移到Azure SQL Database

    使用SQL Server Management Studio 2014将本地数据库迁移到Azure SQL Database的过程比较简单,在SSMS2014中,有一个任务选项为“将数据库部署到Win ...

  9. [Windows Azure] Create and use a reporting service in Windows Azure SQL Reporting

    Create and use a reporting service in Windows Azure SQL Reporting In this tutorial you will learn ab ...

随机推荐

  1. c++ oop

    C ++语言的主要优势之一是与其前身语言C不同的是,它被设计为支持面向对象编程(OOP). 这是一个相当简单的概念:你将操纵不同的对象,每个对象都是一个特定类的实例. 类是一组方法(绑定到这个类的函数 ...

  2. Android_Fragment(碎片)知识点讲解

    今天我们来了解下Android 中的fragment(碎片)这个东西. Fragment 从英文翻译而言是碎片,片段的意思.那么这个东西是什么,在Android 中有什么用呢? 一.概念 Fragme ...

  3. Minecraft 插件 world edit 的cs 命令

    现在 jar包 http://www.mozilla.org/rhino ,放到classpath 我是放到libs目录中, 1.8 spi 服 @ECHO OFFjava -cp ".;. ...

  4. MySQL 安装和启动服务,“本地计算机 上的 MySQL 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。”

    MySQL 安装和启动服务,以及遇到的问题 MySQL版本: mysql-5.7.13-winx64.zip (免安装,解压放到程序文件夹即可,比如 C:\Program Files\mysql-5. ...

  5. Tomcat 7.x热部署

    由于在开发阶段,需要频繁的修改源代码,如果每次修改完代码都去重启服务器来检测效果,那简直麻烦到你想死,又耽误时间,所以,在网上找了许久,终于找到了解决办法, 特来分享 我也试了修改Server.xml ...

  6. Flyweight(享元)--对象结构型模式

    1.意图 运用共享技术有效地支持大量细粒度的对象. 2.动机 Flyweight模式描述了如何共享对象,使得可以细粒度地使用它们,而无需高昂的代价.flyweight是一个共享对象,它可以同时在多个场 ...

  7. 放假回来啦!!小技能:一个div不给width,怎么让它居中捏?`(*∩_∩*)′

    答案是:这个div没有浮动的话,就用text-align: center; 有的话...我也不知道了

  8. DataRead 和DataSet区别

    dataset表示一个数据集,是数据在内存中的缓存. 可以包括多个表DatSet 连接数据库时是非面向连接的.把表全部读到Sql中的缓冲池,并断开于数据库的连接 datareader 连接数据库时是面 ...

  9. nginx.conf详解

    ##定义nginx运行的用户各用户组user nginx nginx; ##nginx进程数,建议设置与cpu核心数一致worker_processes 1; #为每个进程分配CPU的工作内核 wor ...

  10. Kinect2在线重建(Tracking and Mapping)

    前言      个人理解错误的地方还请不吝赐教,转载请标明出处,内容如有改动更新,请看原博:http://www.cnblogs.com/hitcm/      如有任何问题,feel free to ...