我寫了一個簡單的.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