我们在整个应用程序中使用SimpleLucene进行搜索。一切正常。我们将我们的应用程序上传到azure并且工作正常,但是,每次我做任何更改并且必须重新上传到Azure时,我必须重新创建索引以确保它是最新的。我想将Azure索引移动到Azure上的Blob存储,但是我不知道如何使Azure Lucene目录与SimpleLucene一起使用。示例代码将不胜感激。
我正在构建这样的索引。
var path = @"my path to the index";
var indexWriter = new SimpleLucene.Impl.DirectoryIndexWriter(new System.IO.DirectoryInfo(path), true);
var definitions = GetDefinitions().ToList();
using (var indexService = new SimpleLucene.Impl.IndexService(indexWriter))
{
try
{
indexService.IndexEntities(definitions, new DefinitionsIndexDefinition());
}
catch { }
}
如何从Azure blob存储创建indexWriter?我知道我可以使用AzureDirectory dll,但它不适用于SimpleLucene
答案 0 :(得分:1)
我想说Simple Lucene可能不适合与Windows Azure一起使用,因为我不确定它是否具有在Windows Azure Blob存储上存储索引的代码。您确定它可以保存到Windows Azure Blob存储上的索引吗?
我使用了Lucene.NET for Windows Azure,您可以通过设置Azure Blob存储来直接在Windows Azure Blob存储上存储索引
步骤1:配置Azure Blob存储
<configuration>
<appSettings>
<!-- azure SETTINGS -->
<add key="BlobStorageEndpoint" value="http://YOURACCOUNT.blob.core.windows.net"/>
<add key="AccountName" value="YOURACCOUNTNAME"/>
<add key="AccountSharedKey" value="YOURACCOUNTKEY"/>
</appSettings>
</configuration>
步骤2:使用IndexWriter在Azure Blob存储上存储索引:
AzureDirectory azureDirectory = new AzureDirectory("TestCatalog");
IndexWriter indexWriter = new IndexWriter(azureDirectory, new StandardAnalyzer(), true);
Document doc = new Document();
doc.Add(new Field("id", DateTime.Now.ToFileTimeUtc().ToString(), Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.NO));
doc.Add(new Field("Title", “this is my title”, Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.NO));
doc.Add(new Field("Body", “This is my body”, Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.NO));
indexWriter.AddDocument(doc);
indexWriter.Close();
因此,如果您决定将Lucene.net用于Windows Azure,这将是相对容易和最佳的行动方案。