在尝试对datetime(long)数字字段进行排序时,我总是得到一个FormatException。
将字符串转换为DateTime时,解析字符串以获取 将每个变量放入DateTime对象之前的日期。
添加数字字段:
doc.Add(new NumericField("creationDate", Field.Store.YES, true)
.SetLongValue(DateTime.UtcNow.Ticks);
添加排序:
// boolean query
var sortField = new SortField("creationDate", SortField.LONG, true);
var inverseSort = new Sort(sortField);
var results = searcher.Search(query, null, 100, inverseSort); // exception thrown here
检查索引,我可以验证' creationDate'字段存储"长"值。可能导致此异常的原因是什么?
编辑:
查询
var query = new BooleanQuery();
foreach (var termQuery in incomingProps.Select(p => new TermQuery(new Term(kvp.Key, kvp.Value.ToLowerInvariant()))
{
query.Add(new BooleanClause(termQuery , Occur.Must));
}
return query;
版本:Lucene.Net 3.0.3
更新:
此问题再次发生,现在使用INT值。 我下载了Lucene.Net源代码并调试了该问题。
所以它在FieldCache中的某个地方,当试图解析值"`\ b \ 0 \ 0 \ 0"到整数,这似乎有点奇怪。
我将这些值添加为数字字段:
doc.Add(new NumericField(VersionNum, int.MaxValue, Field.Store.YES,
true).SetIntValue(VersionValue));
当我应该至少获得1次回击时,我得到了例外。 检查索引后,我看到该字段的术语如下:
现场文字是:
编辑:
我已经硬编码了一个int值并添加了几个段:
doc.Add(new Field(VersionNum, NumericUtils.IntToPrefixCoded(1), Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS));
然而,当我尝试排序时,我得到了解析错误:
var sortVersion = new SortField(VersionNum, SortField.INT, true);
对于每一个例外,Lucene都试图解析" \ b \ 0 \ 0 \ 0"。 查看存储为字符串的前缀编码,1将转换为" \ b \ 0 \ 0 \ 0 \ 1"我在猜?
Lucene可能会在FieldCache中留下一些垃圾吗?
答案 0 :(得分:1)
这是一个单元测试,试图捕捉你所要求的内容。测试通过。你能解释一下你的代码有什么不同吗? (发布完整的失败测试将有助于我们了解您正在做什么:-))
ng-model