blob: 7532c2589504c98db63d925d6939f2858892de5f [file] [log] [blame]
using NUnit.Framework;
namespace Lucene.Net.Search.Payloads
{
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using BytesRef = Lucene.Net.Util.BytesRef;
using DefaultSimilarity = Lucene.Net.Search.Similarities.DefaultSimilarity;
using SpanQuery = Lucene.Net.Search.Spans.SpanQuery;
using Term = Lucene.Net.Index.Term;
/// <summary>
/// TestExplanations subclass focusing on payload queries
/// </summary>
[TestFixture]
public class TestPayloadExplanations : TestExplanations
{
private readonly PayloadFunction[] functions = new PayloadFunction[]
{
new AveragePayloadFunction(),
new MinPayloadFunction(),
new MaxPayloadFunction()
};
[SetUp]
public override void SetUp()
{
base.SetUp();
searcher.Similarity = DefaultSimilarityAnonymousClass.Default;
}
private sealed class DefaultSimilarityAnonymousClass : DefaultSimilarity
{
public static readonly DefaultSimilarityAnonymousClass Default = new DefaultSimilarityAnonymousClass();
private DefaultSimilarityAnonymousClass()
{
}
public override float ScorePayload(int doc, int start, int end, BytesRef payload)
{
return 1 + (payload.GetHashCode() % 10);
}
}
/// <summary>
/// macro for payloadtermquery </summary>
private SpanQuery Pt(string s, PayloadFunction fn, bool includeSpanScore)
{
return new PayloadTermQuery(new Term(FIELD, s), fn, includeSpanScore);
}
/* simple PayloadTermQueries */
[Test]
public virtual void TestPT1()
{
foreach (PayloadFunction fn in functions)
{
Qtest(Pt("w1", fn, false), new int[] { 0, 1, 2, 3 });
Qtest(Pt("w1", fn, true), new int[] { 0, 1, 2, 3 });
}
}
[Test]
public virtual void TestPT2()
{
foreach (PayloadFunction fn in functions)
{
SpanQuery q = Pt("w1", fn, false);
q.Boost = 1000;
Qtest(q, new int[] { 0, 1, 2, 3 });
q = Pt("w1", fn, true);
q.Boost = 1000;
Qtest(q, new int[] { 0, 1, 2, 3 });
}
}
[Test]
public virtual void TestPT4()
{
foreach (PayloadFunction fn in functions)
{
Qtest(Pt("xx", fn, false), new int[] { 2, 3 });
Qtest(Pt("xx", fn, true), new int[] { 2, 3 });
}
}
[Test]
public virtual void TestPT5()
{
foreach (PayloadFunction fn in functions)
{
SpanQuery q = Pt("xx", fn, false);
q.Boost = 1000;
Qtest(q, new int[] { 2, 3 });
q = Pt("xx", fn, true);
q.Boost = 1000;
Qtest(q, new int[] { 2, 3 });
}
}
// TODO: test the payloadnear query too!
}
}