我写了一个简单的.NET Windows服务,它将文档推送到Apache Solr v4.1。为了访问Solr,我使用了SolrNet。我的代码是: 索引时查询Solr导致索引丢失文档
var solr = _container.Resolve<ISolrOperations<Document>>();
solr.Delete(SolrQuery.All);
var docs = from o in documents
orderby o.Id ascending
select o;
for (var i = 0; i < docs.Count(); i++)
{
var texts = new List<string>();
if (docs.ToList()[i].DocumentAttachments.Count > 0)
{
foreach (var attach in docs.ToList()[i].DocumentAttachments)
{
using (var fileStream = System.IO.File.OpenRead(...))
{
var extractResult = solr.Extract(
new ExtractParameters(fileStream, attach.Id.ToString(CultureInfo.InvariantCulture))
{
ExtractFormat = ExtractFormat.Text,
ExtractOnly = true
}
);
texts.Add(extractResult.Content);
}
}
}
docs.ToList()[i].GetFilesText = texts;
solr.Add(docs.ToList()[i]);
if (i % _commitStep == 0)
{
solr.Commit();
solr.Optimize();
}
}
solr.Commit();
solr.Optimize();
solr.BuildSpellCheckDictionary();
“Document.GetFilesText” - 这是一个字段,用于存储文本,从PDF文件中提取。
本示例已从日志记录方法中清除(写入Windows事件日志)。虽然索引,我看着于:
一)事件日志 - 显示文件索引进步
二)在“Solr管理” web应用“核心管理”页面 - 显示的文件数在指数
当我只是索引文件,没有搜索,所有作品都正确 - 事件日志显示“7500 docs added”条目,“Core Admin”显示num docs = 7500。
但是,如果我尝试索引中搜索文件,我有这些错误:
- 搜索结果包含了不是所有的传递公文
- “核心管理”重置NUM文档值。例如,EventLog显示7500文档索引为,但“Core Admin”显示num docs = 23。和num文档重新设置每次,当我查询Solr。
我的查询代码:
searchPhrase = textBox1.Text;
var documents = Solr.Query(new SolrQuery(searchPhrase), new QueryOptions
{
Highlight = new HighlightingParameters
{
UsePhraseHighlighter = true,
Fields = new Collection<string> { "Field1", "Field2", "Field3" },
BeforeTerm = "<b>",
AfterTerm = "</b>"
},
Rows = 100
});
UPD:为了更清楚地 我在我的web应用程序的 “搜索” 页面这些行:
public class MyController : Controller
{
public ISolrOperations<Document> Solr { get; set; }
public MyController()
{
//_solr = solr;
}
//
// GET: /Search/My/
public ActionResult Index()
{
Solr.Delete(SolrQuery.All);
return View();
}
...
而且,打开此页面在浏览器中,导致Solr索引完全丢失文档。:-)
我从solrnet例子中愚蠢地copypasted代码:-) Thnx,Paige! – lewis 2013-03-13 10:21:45
Paige,我用webapp源代码更新了我的最新帖子。 – lewis 2013-03-13 10:33:09