0
저는 Lucene .NET v3 on .NET 4.5를 사용하고 있습니다. 내 쿼리에서 잘못된 결과를 얻는 이유가 확실하지 않습니다. 다음은 간단한 테스트 응용 프로그램입니다 :Lucene 숫자 범위 쿼리 결과가 반환되지 않음/예기치 않은 결과가 발생했습니다.
static class Program
{
static Document MakeDocument(String rcaName, int statusCode)
{
var doc = new Document();
doc.Add(new Field("RCAName", rcaName, Field.Store.YES, Field.Index.NO));
doc.Add(new Field("ActionId", Guid.NewGuid().ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
var status = new NumericField("Status", Field.Store.YES, true);
status.SetLongValue(statusCode);
doc.Add(status);
return doc;
}
static void Main()
{
var dir = new SimpleFSDirectory(new DirectoryInfo("C:/Sologic/temp/bsindex"));
// var analyzer = new SologicAnalyzer() { StopWords = StopAnalyzer.ENGLISH_STOP_WORDS_SET };
var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
using (var writer = new Lucene.Net.Index.IndexWriter(dir, analyzer, true, Lucene.Net.Index.IndexWriter.MaxFieldLength.UNLIMITED))
{
writer.AddDocument(MakeDocument("RCA 1", 2));
writer.AddDocument(MakeDocument("RCA 2", 4));
writer.AddDocument(MakeDocument("RCA 3", 2));
writer.AddDocument(MakeDocument("RCA 4", 4));
}
var searcher = new Lucene.Net.Search.IndexSearcher(IndexReader.Open(dir, true));
var query = new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_30, "Status", analyzer).Parse("2");
var hits = searcher.Search(query, 100);
Console.WriteLine(hits.TotalHits);
Console.Read();
}
}
내가 루크와 인덱스를 열 때, 나는 다음과 같은 쿼리를 실행 :
Status:[2 TO 2] - 0
Status:[4 TO 4] - 0
Status:[0 TO 4] - 4
Status:[0 TO 2] - 4
Status:[0 TO 0] - 0
나는 조금 당황 해요. 누구든지 내가 뭘 잘못하고 있는지 알아?
status.SetLongValue()가 SetIntValue()가되는 방법은 무엇입니까? statusCode는 암시 적으로 long으로 형변환됩니다. – HelloWorld