我们希望在Solr中索引并存储一组Word文档,并将它们显示为多值文本字段的元素,每个文档的内容在索引中的一个条目下显示为元素。换句话说,它看起来像这样
我们不希望索引的每个文档都有自己的唯一ID;一组文件将是特定身份证的子女。该ID可以有任意数量的文档。 怎么做?
更新:这是我的C#代码;如何使用(++count).ToString()
using (FileStream fileStream = File.OpenRead(path))
{
solr.Extract(
new ExtractParameters(fileStream, (++_count).ToString())
{
ExtractFormat = ExtractFormat.Text,
ExtractOnly = false,
Fields = new List<ExtractField>()
{
new ExtractField("action", actionTo),
new ExtractField("actiondate", actionDate),
new ExtractField("abstract", abstract),
new ExtractField("docval", docval),
new ExtractField("documentgeo",documentgeo),
new ExtractField("filename", filename),
new ExtractField("isprimary", IsPrimary.ToString())
},
AutoCommit = true
}
);
}
答案 0 :(得分:3)
在SOLR架构中定义两个字段 - id
和text
。 text
应该是多值的。然后在SolrInputDocument
中汇总id和索引的文本数据。
<field name="id" type="int" multiValued="false" stored="true" indexed="true" />
<field name="text" type="text" multiValued="true" stored="true" indexed="true" />
我不知道c#
API,但使用SolrJ很容易使用SolrInputDocument.addField("fieldname", "value")
进行汇总。
更新示例
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", 1)
for (String docText : documents){
doc.addField("text", docText)
}
.NET更新示例
我会按以下方式定义我的课程:
public class Document{
[SolrUniqueKey("id")]
public integer Id { get; set; }
[SolrField("text")]
public ICollection<string> texts { get; set; }
然后我会填充它并提交类似这样的伪.NET代码:
Document doc = new Document();
for (String documentPath : paths) {
using (FileStream fileStream = File.OpenRead(path)) {
string id = fileStream.getId();
if (doc.getId() == id){
doc.getTexts.add(fileStream.getText())
}
}
}
var solr = ServiceLocator.Current.GetInstance<ISolrOperations<Document>>();
solr.Add(doc);
solr.Commit();