Adding overloads to Document for GetValues and Get
diff --git a/src/Lucene.Net.Misc/Document/LazyDocument.cs b/src/Lucene.Net.Misc/Document/LazyDocument.cs
index 1436cae..92c886b 100644
--- a/src/Lucene.Net.Misc/Document/LazyDocument.cs
+++ b/src/Lucene.Net.Misc/Document/LazyDocument.cs
@@ -354,6 +354,11 @@
{
return GetRealValue().GetTokenStream(analyzer);
}
+
+ public virtual string ToString(IFormatProvider provider)
+ {
+ return GetRealValue().ToString(provider);
+ }
}
}
}
\ No newline at end of file
diff --git a/src/Lucene.Net.Tests/Index/TestIndexWriterExceptions.cs b/src/Lucene.Net.Tests/Index/TestIndexWriterExceptions.cs
index c9ca8a4..8833cb8 100644
--- a/src/Lucene.Net.Tests/Index/TestIndexWriterExceptions.cs
+++ b/src/Lucene.Net.Tests/Index/TestIndexWriterExceptions.cs
@@ -2043,6 +2043,11 @@
{
return null;
}
+
+ public virtual string ToString(IFormatProvider provider)
+ {
+ return GetStringValue().ToString(provider);
+ }
}
// See LUCENE-4870 TooManyOpenFiles errors are thrown as
diff --git a/src/Lucene.Net.Tests/Index/TestIndexableField.cs b/src/Lucene.Net.Tests/Index/TestIndexableField.cs
index 06b39ba..89e9efa 100644
--- a/src/Lucene.Net.Tests/Index/TestIndexableField.cs
+++ b/src/Lucene.Net.Tests/Index/TestIndexableField.cs
@@ -225,6 +225,11 @@
{
return GetReaderValue() != null ? analyzer.GetTokenStream(Name, GetReaderValue()) : analyzer.GetTokenStream(Name, new StringReader(GetStringValue()));
}
+
+ public virtual string ToString(IFormatProvider provider)
+ {
+ return GetStringValue().ToString(provider);
+ }
}
// Silly test showing how to index documents w/o using Lucene's core
diff --git a/src/Lucene.Net/Document/Document.cs b/src/Lucene.Net/Document/Document.cs
index 4e5f186..0f1a081 100644
--- a/src/Lucene.Net/Document/Document.cs
+++ b/src/Lucene.Net/Document/Document.cs
@@ -235,9 +235,101 @@
var result = new List<string>();
foreach (IIndexableField field in fields)
{
- if (field.Name.Equals(name, StringComparison.Ordinal) && field.GetStringValue() != null)
+ string fieldStringValue = field.GetStringValue();
+ if (field.Name.Equals(name, StringComparison.Ordinal) && fieldStringValue != null)
{
- result.Add(field.GetStringValue());
+ result.Add(fieldStringValue);
+ }
+ }
+
+ if (result.Count == 0)
+ {
+ return NO_STRINGS;
+ }
+
+ return result.ToArray();
+ }
+
+ /// <summary>
+ /// Returns an array of values of the field specified as the method parameter.
+ /// This method returns an empty array when there are no
+ /// matching fields. It never returns <c>null</c>.
+ /// For <see cref="Int32Field"/>, <see cref="Int64Field"/>,
+ /// <see cref="SingleField"/> and <seealso cref="DoubleField"/> it returns the string value of the number. If you want
+ /// the actual numeric field instances back, use <see cref="GetFields(string)"/>. </summary>
+ /// <param name="name"> the name of the field </param>
+ /// <param name="format">A standard or custom numeric format string. This parameter has no effect if this field is non-numeric.</param>
+ /// <returns> a <see cref="T:string[]"/> of field values </returns>
+ public string[] GetValues(string name, string format)
+ {
+ var result = new List<string>();
+ foreach (IIndexableField field in fields)
+ {
+ string fieldStringValue = field.GetStringValue(format);
+ if (field.Name.Equals(name, StringComparison.Ordinal) && fieldStringValue != null)
+ {
+ result.Add(fieldStringValue);
+ }
+ }
+
+ if (result.Count == 0)
+ {
+ return NO_STRINGS;
+ }
+
+ return result.ToArray();
+ }
+
+ /// <summary>
+ /// Returns an array of values of the field specified as the method parameter.
+ /// This method returns an empty array when there are no
+ /// matching fields. It never returns <c>null</c>.
+ /// For <see cref="Int32Field"/>, <see cref="Int64Field"/>,
+ /// <see cref="SingleField"/> and <seealso cref="DoubleField"/> it returns the string value of the number. If you want
+ /// the actual numeric field instances back, use <see cref="GetFields(string)"/>. </summary>
+ /// <param name="name"> the name of the field </param>
+ /// <param name = "provider" > An object that supplies culture-specific formatting information.This parameter has no effect if this field is non-numeric.</param>
+ /// <returns> a <see cref="T:string[]"/> of field values </returns>
+ public string[] GetValues(string name, IFormatProvider provider)
+ {
+ var result = new List<string>();
+ foreach (IIndexableField field in fields)
+ {
+ string fieldStringValue = field.GetStringValue(provider);
+ if (field.Name.Equals(name, StringComparison.Ordinal) && fieldStringValue != null)
+ {
+ result.Add(fieldStringValue);
+ }
+ }
+
+ if (result.Count == 0)
+ {
+ return NO_STRINGS;
+ }
+
+ return result.ToArray();
+ }
+
+ /// <summary>
+ /// Returns an array of values of the field specified as the method parameter.
+ /// This method returns an empty array when there are no
+ /// matching fields. It never returns <c>null</c>.
+ /// For <see cref="Int32Field"/>, <see cref="Int64Field"/>,
+ /// <see cref="SingleField"/> and <seealso cref="DoubleField"/> it returns the string value of the number. If you want
+ /// the actual numeric field instances back, use <see cref="GetFields(string)"/>. </summary>
+ /// <param name="name"> the name of the field </param>
+ /// <param name="format">A standard or custom numeric format string. This parameter has no effect if this field is non-numeric.</param>
+ /// <param name="provider">An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric.</param>
+ /// <returns> a <see cref="T:string[]"/> of field values </returns>
+ public string[] GetValues(string name, string format, IFormatProvider provider)
+ {
+ var result = new List<string>();
+ foreach (IIndexableField field in fields)
+ {
+ string fieldStringValue = field.GetStringValue(format, provider);
+ if (field.Name.Equals(name, StringComparison.Ordinal) && fieldStringValue != null)
+ {
+ result.Add(fieldStringValue);
}
}
@@ -262,9 +354,80 @@
{
foreach (IIndexableField field in fields)
{
- if (field.Name.Equals(name, StringComparison.Ordinal) && field.GetStringValue() != null)
+ string fieldStringValue = field.GetStringValue();
+ if (field.Name.Equals(name, StringComparison.Ordinal) && fieldStringValue != null)
{
- return field.GetStringValue();
+ return fieldStringValue;
+ }
+ }
+ return null;
+ }
+
+ /// <summary>
+ /// Returns the string value of the field with the given name if any exist in
+ /// this document, or <c>null</c>. If multiple fields exist with this name, this
+ /// method returns the first value added. If only binary fields with this name
+ /// exist, returns <c>null</c>.
+ /// For <see cref="Int32Field"/>, <see cref="Int64Field"/>,
+ /// <see cref="SingleField"/> and <seealso cref="DoubleField"/> it returns the string value of the number. If you want
+ /// the actual numeric field instance back, use <see cref="GetField(string)"/>.
+ /// </summary>
+ /// <param name="format">A standard or custom numeric format string. This parameter has no effect if this field is non-numeric.</param>
+ public string Get(string name, string format)
+ {
+ foreach (IIndexableField field in fields)
+ {
+ string fieldStringValue = field.GetStringValue(format);
+ if (field.Name.Equals(name, StringComparison.Ordinal) && fieldStringValue != null)
+ {
+ return fieldStringValue;
+ }
+ }
+ return null;
+ }
+
+ /// <summary>
+ /// Returns the string value of the field with the given name if any exist in
+ /// this document, or <c>null</c>. If multiple fields exist with this name, this
+ /// method returns the first value added. If only binary fields with this name
+ /// exist, returns <c>null</c>.
+ /// For <see cref="Int32Field"/>, <see cref="Int64Field"/>,
+ /// <see cref="SingleField"/> and <seealso cref="DoubleField"/> it returns the string value of the number. If you want
+ /// the actual numeric field instance back, use <see cref="GetField(string)"/>.
+ /// </summary>
+ /// <param name="provider">An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric.</param>
+ public string Get(string name, IFormatProvider provider)
+ {
+ foreach (IIndexableField field in fields)
+ {
+ string fieldStringValue = field.GetStringValue(provider);
+ if (field.Name.Equals(name, StringComparison.Ordinal) && fieldStringValue != null)
+ {
+ return fieldStringValue;
+ }
+ }
+ return null;
+ }
+
+ /// <summary>
+ /// Returns the string value of the field with the given name if any exist in
+ /// this document, or <c>null</c>. If multiple fields exist with this name, this
+ /// method returns the first value added. If only binary fields with this name
+ /// exist, returns <c>null</c>.
+ /// For <see cref="Int32Field"/>, <see cref="Int64Field"/>,
+ /// <see cref="SingleField"/> and <seealso cref="DoubleField"/> it returns the string value of the number. If you want
+ /// the actual numeric field instance back, use <see cref="GetField(string)"/>.
+ /// </summary>
+ /// <param name="format">A standard or custom numeric format string. This parameter has no effect if this field is non-numeric.</param>
+ /// <param name="provider">An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric.</param>
+ public string Get(string name, string format, IFormatProvider provider)
+ {
+ foreach (IIndexableField field in fields)
+ {
+ string fieldStringValue = field.GetStringValue(format, provider);
+ if (field.Name.Equals(name, StringComparison.Ordinal) && fieldStringValue != null)
+ {
+ return fieldStringValue;
}
}
return null;
@@ -288,5 +451,26 @@
buffer.Append(">");
return buffer.ToString();
}
+
+ /// <summary>
+ /// Prints the fields of a document for human consumption.
+ /// </summary>
+ /// <param name="provider">An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric.</param>
+ public string ToString(IFormatProvider provider)
+ {
+ var buffer = new StringBuilder();
+ buffer.Append("Document<");
+ for (int i = 0; i < fields.Count; i++)
+ {
+ IIndexableField field = fields[i];
+ buffer.Append(field.ToString(provider));
+ if (i != fields.Count - 1)
+ {
+ buffer.Append(" ");
+ }
+ }
+ buffer.Append(">");
+ return buffer.ToString();
+ }
}
}
\ No newline at end of file
diff --git a/src/Lucene.Net/Document/Field.cs b/src/Lucene.Net/Document/Field.cs
index a620ebc..801fcb4 100644
--- a/src/Lucene.Net/Document/Field.cs
+++ b/src/Lucene.Net/Document/Field.cs
@@ -796,6 +796,26 @@
}
/// <summary>
+ /// Prints a <see cref="Field"/> for human consumption.
+ /// </summary>
+ /// <param name="provider">An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric.</param>
+ public virtual string ToString(IFormatProvider provider)
+ {
+ StringBuilder result = new StringBuilder();
+
+ if(FieldsData != null)
+ {
+ result.AppendFormat(provider, "{0}<{1}:{3}>", m_type.ToString(), m_name.ToString(), FieldsData);
+ }
+ else
+ {
+ result.AppendFormat(provider, "{0}<{1}:>", m_type.ToString(), m_name.ToString());
+ }
+
+ return result.ToString();
+ }
+
+ /// <summary>
/// Returns the <see cref="Documents.FieldType"/> for this field as type <see cref="Documents.FieldType"/>. </summary>
// LUCENENET specific property to prevent the need to cast. The FieldType property was renamed IndexableFieldType
// in order to accommodate this (more Lucene like) property.
diff --git a/src/Lucene.Net/Index/IndexableField.cs b/src/Lucene.Net/Index/IndexableField.cs
index 18fc0ee..93f0b75 100644
--- a/src/Lucene.Net/Index/IndexableField.cs
+++ b/src/Lucene.Net/Index/IndexableField.cs
@@ -201,5 +201,11 @@
/// a non-null value if the field is to be indexed </returns>
/// <exception cref="IOException"> Can be thrown while creating the <see cref="TokenStream"/> </exception>
TokenStream GetTokenStream(Analyzer analyzer);
+
+ /// <summary>
+ /// Prints a <see cref="Field"/> for human consumption.
+ /// </summary>
+ /// <param name="provider">An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric.</param>
+ string ToString(IFormatProvider provider);
}
}
\ No newline at end of file