使用NumericField时,每次都没有任何回复

时间:2014-11-26 09:07:20

标签: lucene.net

过去两天一直在玩Lucene.NET。

在阅读了Dates之后,我被认为Dates最好转换为毫秒,并存储在NumericField中,Indexing = true,Store = No。

但现在没有什么会回来 - 它必须是基本的东西,但我只是没有看到它。

保存代码如下:

...
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);

当我根据Field中保存的值查询文档时没问题。

当我通过匹配NumericFields中的值来查询文档时,什么都不返回。

我哪里出错了?

感谢您的帮助。

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");

使用:

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 个答案:

没有答案