ドキュメントをApache Solr v4.1にプッシュする単純な.NET Windowsサービスを作成しました。Solr へのアクセスには、SolrNet を使用しました。私のコードは次のとおりです。
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 イベント ログへの書き込み) から消去されます。
a) イベントログ - ドキュメントのインデックス作成の進行状況を表示
b) 「Solr Admin」ウェブアプリの「Core Admin」ページ - インデックス内のドキュメントの数を 表示
検索せずにドキュメントのインデックスを作成しているだけの場合、すべて正常に動作します。イベント ログには「7500 docs added」エントリが表示され、「Core Admin」にはnum docs = 7500が表示されます。
しかし、インデックス作成中にドキュメントを検索しようとすると、次のエラーが発生
します。たとえば、EventLog には7500 docs indexedと表示されますが、「Core Admin」にはnum docs=23と表示されます。Solr にクエリを実行すると、毎回num docsがリセットされます。
私のクエリコード:
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: 明確 にするために、webapp の「検索」ページに次の行があります。
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 インデックスからドキュメントが完全に失われます.:-)