blob: f7c599da7c967526ff77e8ed542e88cc7e9273e7 [file] [log] [blame]
using Lucene.Net.Documents;
using NUnit.Framework;
using Assert = Lucene.Net.TestFramework.Assert;
namespace Lucene.Net.Search
{
/*
* 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 Directory = Lucene.Net.Store.Directory;
using Document = Documents.Document;
using Field = Field;
using IndexReader = Lucene.Net.Index.IndexReader;
using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
using RandomIndexWriter = Lucene.Net.Index.RandomIndexWriter;
using Term = Lucene.Net.Index.Term;
/// <summary>
/// https://issues.apache.org/jira/browse/LUCENE-1974
///
/// represent the bug of
///
/// BooleanScorer.Score(Collector collector, int max, int firstDocID)
///
/// Line 273, end=8192, subScorerDocID=11378, then more got false?
/// </summary>
[TestFixture]
public class TestPrefixInBooleanQuery : LuceneTestCase
{
private const string FIELD = "name";
private static Directory directory;
private static IndexReader reader;
private static IndexSearcher searcher;
/// <summary>
/// LUCENENET specific
/// Is non-static because Similarity and TimeZone are not static.
/// </summary>
[OneTimeSetUp]
public override void BeforeClass()
{
base.BeforeClass();
directory = NewDirectory();
RandomIndexWriter writer = new RandomIndexWriter(
#if FEATURE_INSTANCE_TESTDATA_INITIALIZATION
this,
#endif
Random, directory);
Document doc = new Document();
Field field = NewStringField(FIELD, "meaninglessnames", Field.Store.NO);
doc.Add(field);
for (int i = 0; i < 5137; ++i)
{
writer.AddDocument(doc);
}
field.SetStringValue("tangfulin");
writer.AddDocument(doc);
field.SetStringValue("meaninglessnames");
for (int i = 5138; i < 11377; ++i)
{
writer.AddDocument(doc);
}
field.SetStringValue("tangfulin");
writer.AddDocument(doc);
reader = writer.GetReader();
searcher = NewSearcher(reader);
writer.Dispose();
}
[OneTimeTearDown]
public override void AfterClass()
{
searcher = null;
reader.Dispose();
reader = null;
directory.Dispose();
directory = null;
base.AfterClass();
}
[Test]
public virtual void TestPrefixQuery()
{
Query query = new PrefixQuery(new Term(FIELD, "tang"));
Assert.AreEqual(2, searcher.Search(query, null, 1000).TotalHits, "Number of matched documents");
}
[Test]
public virtual void TestTermQuery()
{
Query query = new TermQuery(new Term(FIELD, "tangfulin"));
Assert.AreEqual(2, searcher.Search(query, null, 1000).TotalHits, "Number of matched documents");
}
[Test]
public virtual void TestTermBooleanQuery()
{
BooleanQuery query = new BooleanQuery();
query.Add(new TermQuery(new Term(FIELD, "tangfulin")), Occur.SHOULD);
query.Add(new TermQuery(new Term(FIELD, "notexistnames")), Occur.SHOULD);
Assert.AreEqual(2, searcher.Search(query, null, 1000).TotalHits, "Number of matched documents");
}
[Test]
public virtual void TestPrefixBooleanQuery()
{
BooleanQuery query = new BooleanQuery();
query.Add(new PrefixQuery(new Term(FIELD, "tang")), Occur.SHOULD);
query.Add(new TermQuery(new Term(FIELD, "notexistnames")), Occur.SHOULD);
Assert.AreEqual(2, searcher.Search(query, null, 1000).TotalHits, "Number of matched documents");
}
}
}