Skip to content

Commit

Permalink
issue #95 Highlights didn't support several snippets in results
Browse files Browse the repository at this point in the history
git-svn-id: http://solrnet.googlecode.com/svn/trunk@517 66c3f25c-543c-0410-ae2e-6f2ca0bd8c61
  • Loading branch information
mausch committed Feb 15, 2010
1 parent baeb72c commit d2f97e5
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 16 deletions.
32 changes: 23 additions & 9 deletions SolrNet.Tests/SolrQueryResultsParserTests.cs
Expand Up @@ -444,23 +444,37 @@ public partial class SolrQueryResultsParserTests {
Assert.AreEqual("2.2", header.Params["version"]);
}

private IDictionary<Product, IDictionary<string, ICollection<string>>> ParseHighlightingResults(string rawXml) {
var mapper = new AttributesMappingManager();
var parser = new HighlightingResponseParser<Product>(new SolrDocumentIndexer<Product>(mapper));
var xml = new XmlDocument();
xml.LoadXml(rawXml);
var docNode = xml.SelectSingleNode("response/lst[@name='highlighting']");
var item = new Product { Id = "SP2514N" };
return parser.ParseHighlighting(new SolrQueryResults<Product> { item }, docNode);
}

[Test]
public void ParseHighlighting() {
var mapper = new AttributesMappingManager();
var parser = new HighlightingResponseParser<Product>(new SolrDocumentIndexer<Product>(mapper));
var xml = new XmlDocument();
xml.LoadXml(responseXmlWithHighlighting);
var docNode = xml.SelectSingleNode("response/lst[@name='highlighting']");
var item = new Product { Id = "SP2514N" };
var highlights = parser.ParseHighlighting(new SolrQueryResults<Product> { item }, docNode);
var highlights = ParseHighlightingResults(responseXmlWithHighlighting);
Assert.AreEqual(1, highlights.Count);
Assert.AreSame(item, highlights.First().Key);
var kv = highlights.First().Value;
Assert.AreEqual(1, kv.Count);
Assert.AreEqual("features", kv.First().Key);
Assert.Like(kv.First().Value, "Noise");
Assert.AreEqual(1, kv.First().Value.Count);
//Console.WriteLine(kv.First().Value.First());
Assert.Like(kv.First().Value.First(), "Noise");
}

[Test]
public void ParseHighlighting2() {
var highlights = ParseHighlightingResults(responseXmlWithHighlighting2);
var first = highlights.First();
first.Value.Keys.ToList().ForEach(Console.WriteLine);
first.Value["source_en"].ToList().ForEach(Console.WriteLine);
Assert.AreEqual(3, first.Value["source_en"].Count);
}

[Test]
public void ParseSpellChecking() {
var parser = new SpellCheckResponseParser<Product>();
Expand Down
39 changes: 39 additions & 0 deletions SolrNet.Tests/SolrQueryResultsParserTestsXmlResponses.cs
Expand Up @@ -27,6 +27,45 @@ public partial class SolrQueryResultsParserTests {
</response>
";

private const string responseXmlWithHighlighting2 =
@"<?xml version='1.0' encoding='UTF-8'?>
<response>
<lst name='responseHeader'>
<int name='status'>0</int>
<int name='QTime'>16</int>
<lst name='params'>
<str name='hl'>true</str>
</lst>
</lst>
<result name='response' numFound='1' start='0'>
<doc>
<str name='guid'>SP2514N</str>
<str name='id'>SP2514N</str>
</doc>
</result>
<lst name='highlighting'>
<lst name='SP2514N'>
<arr name='source_en'>
<str>
:&lt;/div&gt;
&lt;div class='body repealed'&gt; &lt;FONT
style='BACKGROUND-COLOR: yellow'&gt;Repealed&lt;/FONT&gt;: 80-160, s. 8
</str>
<str>
.&lt;/span&gt;
&lt;span&gt; &lt;FONT
style='BACKGROUND-COLOR: yellow'&gt;Repealed&lt;/FONT&gt;: 80-160, s. 8
</str>
<str>
.&lt;/span&gt;
&lt;span&gt; &lt;FONT
style='BACKGROUND-COLOR: yellow'&gt;Repealed&lt;/FONT&gt;: 80-160, s. 8
</str>
</arr>
</lst>
</lst>
</response>";

private const string responseXml =
@"<?xml version=""1.0"" encoding=""UTF-8""?>
<response>
Expand Down
2 changes: 1 addition & 1 deletion SolrNet/ISolrQueryResults.cs
Expand Up @@ -51,7 +51,7 @@ public interface ISolrQueryResults<T> : IList<T> {
/// <summary>
/// Highlight results
/// </summary>
IDictionary<T, IDictionary<string, string>> Highlights { get; set; }
IDictionary<T, IDictionary<string, ICollection<string>>> Highlights { get; set; }

/// <summary>
/// Spell checking results
Expand Down
14 changes: 9 additions & 5 deletions SolrNet/Impl/ResponseParsers/HighlightingResponseParser.cs
Expand Up @@ -41,8 +41,8 @@ public class HighlightingResponseParser<T> : ISolrResponseParser<T> {
/// <param name="results"></param>
/// <param name="node"></param>
/// <returns></returns>
public IDictionary<T, IDictionary<string, string>> ParseHighlighting(IEnumerable<T> results, XmlNode node) {
var r = new Dictionary<T, IDictionary<string, string>>();
public IDictionary<T, IDictionary<string, ICollection<string>>> ParseHighlighting(IEnumerable<T> results, XmlNode node) {
var r = new Dictionary<T, IDictionary<string, ICollection<string>>>();
var docRefs = node.SelectNodes("lst");
if (docRefs == null)
return r;
Expand All @@ -60,11 +60,15 @@ public class HighlightingResponseParser<T> : ISolrResponseParser<T> {
/// </summary>
/// <param name="nodes"></param>
/// <returns></returns>
public IDictionary<string, string> ParseHighlightingFields(XmlNodeList nodes) {
var fields = new Dictionary<string, string>();
public IDictionary<string, ICollection<string>> ParseHighlightingFields(XmlNodeList nodes) {
var fields = new Dictionary<string, ICollection<string>>();
foreach (XmlNode field in nodes) {
var fieldName = field.Attributes["name"].InnerText;
fields[fieldName] = field.InnerText;
var snippets = new List<string>();
foreach (XmlNode str in field.SelectNodes("str")) {
snippets.Add(str.InnerText);
}
fields[fieldName] = snippets;
}
return fields;
}
Expand Down
2 changes: 1 addition & 1 deletion SolrNet/Impl/SolrQueryResults.cs
Expand Up @@ -182,7 +182,7 @@ public class SolrQueryResults<T> : ISolrQueryResults<T> {

public ResponseHeader Header { get; set;}

public IDictionary<T, IDictionary<string, string>> Highlights { get; set; }
public IDictionary<T, IDictionary<string, ICollection<string>>> Highlights { get; set; }

public SpellCheckResults SpellChecking { get; set; }
public IDictionary<T, IList<T>> SimilarResults { get; set; }
Expand Down

0 comments on commit d2f97e5

Please sign in to comment.