When using NumericField, get absolutely nothing back every time

185 Views Asked by At

Been playing with Lucene.NET the last two days.

After reading up on Dates, I was led to believe that Dates are best converted to Milliseconds, and stored in NumericField, with Indexing=true, and Store=No.

But now nothing ever returns - it must be something basic, but I'm just not seeing it.

The saving code is as follows:

...
else if (type == typeof (DateTime?))
{
    var typedValue = (DateTime?) value;
    field = numericField = new NumericField(documentFieldName, 4, Field.Store.YES, true);
    long milliseconds = typedValue.HasValue?(typedValue.Value.Date.Ticks/TimeSpan.TicksPerMillisecond):0;
    numericField.SetLongValue(milliseconds);
    doc.Add(numericField);
}
...
else
{

    field = stringField = new Field(
                              documentFieldName,
                              (value != null)?value.ToString():string.Empty,
                              Store.YES,
                              Field.Index.ANALYZED) ;
    doc.Add(stringField);
}

// Write the Document to the catalog
indexWriter.AddDocument(doc);

When I query for docs against the values saved in Field ... no problem.

When I query for documents by matching against the values in NumericFields, nothing returns.

Where did I go wrong?

Thanks for your help.

Lucene.Net.Analysis.Analyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
var  q2 = NumericRangeQuery.NewLongRange("Val", 3, 3, true, true);
var uxy2 = documentSearchManagementService.Search("Students", termQuery, "Id");

Using:

public ScoredDocumentResult[] Search(string indexName, Query query, params string[] hitFieldNamesToReturn)
{
    if (_configuration.IndexRootDirectory.IsNullOrEmpty())
    {
        throw new Exception("Configuration.IndexRootDirectory has not been configued yet.");
    }
    indexName.ValidateIsNotNullOrEmpty("indexName");
    hitFieldNamesToReturn.ValidateIsNotDefault("hitFieldNamesToReturn");

    //Specify the index file location where the indexes are to be stored
    string indexFileLocation = Path.Combine(_configuration.IndexRootDirectory, indexName); 

    Lucene.Net.Store.Directory luceneDirectory = Lucene.Net.Store.FSDirectory.Open(indexFileLocation);

    IndexSearcher indexSearcher = new IndexSearcher(luceneDirectory);

    TopScoreDocCollector topScoreDocCollector = TopScoreDocCollector.Create(10, true);
    indexSearcher.Search(query, topScoreDocCollector);

    List<ScoredDocumentResult> results = new List<ScoredDocumentResult>();
    foreach (var scoreDoc in topScoreDocCollector.TopDocs(0, 10).ScoreDocs)
    {
        ScoredDocumentResult resultItem = new ScoredDocumentResult();

        Lucene.Net.Documents.Document doc = indexSearcher.Doc(scoreDoc.Doc);

        resultItem.Score = scoreDoc.Score;
        List<ScoredDocumentFieldResult> fields = new List<ScoredDocumentFieldResult>();

        foreach (string fieldName in hitFieldNamesToReturn)
        {
            string fieldValue = doc.Get(fieldName);
            fields.Add(new ScoredDocumentFieldResult{Key= fieldName,Value=fieldValue});
        }

        resultItem.FieldValues = fields.ToArray();

        results.Add(resultItem);
    }

    indexSearcher.Close();

    return results.ToArray();
}
0

There are 0 best solutions below