Skip to content

Instantly share code, notes, and snippets.

@mausch
Created October 28, 2013 03:27
Show Gist options
  • Save mausch/7191042 to your computer and use it in GitHub Desktop.
Save mausch/7191042 to your computer and use it in GitHub Desktop.
First-class Solr fields and documents (rough draft)
public class SolrDocument {
public readonly IReadOnlyCollection<SolrDocumentOrField> Fields;
public readonly double? Boost;
public SolrDocument(IReadOnlyCollection<SolrDocumentOrField> fields, double? boost) {
Fields = fields;
Boost = boost;
}
}
public class SolrField {
public readonly string Name;
public readonly string Value;
public readonly double? Boost;
public SolrField(string name, string value, double? boost) {
Name = name;
Value = value;
Boost = boost;
}
}
public abstract class SolrDocumentOrField {
private SolrDocumentOrField() {}
public abstract T Match<T>(Func<SolrDocument, T> document, Func<SolrField, T> field);
private class SolrDocumentOrField_Document: SolrDocumentOrField {
private readonly SolrDocument document;
public SolrDocumentOrField_Document(SolrDocument document) {
this.document = document;
}
public override T Match<T>(Func<SolrDocument, T> document, Func<SolrField, T> field) {
return document(this.document);
}
}
private class SolrDocumentOrField_Field: SolrDocumentOrField {
private readonly SolrField field;
public SolrDocumentOrField_Field(SolrField field) {
this.field = field;
}
public override T Match<T>(Func<SolrDocument, T> document, Func<SolrField, T> field) {
return field(this.field);
}
}
public static SolrDocumentOrField Document(SolrDocument document) {
return new SolrDocumentOrField_Document(document);
}
public static SolrDocumentOrField Field(SolrField field) {
return new SolrDocumentOrField_Field(field);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment