2

WordドキュメントのグループをSolrにインデックス付けして保存し、それらを複数値のテキストフィールドの要素として表示し、それぞれのコンテンツをインデックス内のその1つのエントリの下の要素として表示したいと思います。つまり、こんな感じです

  • 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スキーマで、2つのフィールド(idおよび)を定義しますtexttext複数値である必要があります。SolrInputDocument次に、IDとインデックスのテキストデータをsに集約します。

<field name="id" type="int" multiValued="false" stored="true" indexed="true" />
<field name="text" type="text" multiValued="true" stored="true" indexed="true" />

APIはわかりませんが、c#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 に答える