2

我们希望在 Solr 中索引和存储一组 Word 文档,并将它们显示为多值文本字段的元素,每个文本字段的内容都显示为索引中该条目下的一个元素。换句话说,它看起来像这样

  • ID
    • abcdef [Word_1.docx 的文本]
    • xyzabc [Word_2.docx 的文本]
    • efghij [Word_3.docx 的文本]

我们不希望每个被索引的文档都有自己的唯一 ID;一组文档将是特定 ID 的子代。该 ID 可以有任意数量的文档。这个怎么做?

更新:这是我的 C# 代码;对于使用 设置的唯一 ID,我如何将多个文档读入其中(++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 
            }
        );
}
4

1 回答 1

3

在您的 SOLR 模式中定义两个字段 -idtext. text应该是多值的。然后在你的 s 中聚合SolrInputDocumentid 和 index 的文本数据。

<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();   
于 2012-08-14T11:27:43.590 回答