Java 使用SortedSetDocValuesField对多个字段进行排序-错误:字段的意外docvalues类型SORTED_设置

Java 使用SortedSetDocValuesField对多个字段进行排序-错误:字段的意外docvalues类型SORTED_设置,java,sorting,jsf,lucene,Java,Sorting,Jsf,Lucene,我只是在用Lucene 5.5.0实现一个JSF web应用程序的搜索。在应用程序中,多个用户可以编辑文档,并将创建非常简单的(仅日期和用户名)编辑日志。例如: 2017-02-10 user15 2017-02-01 user14 2017-01-15 user15 现在我想有一个搜索功能,用户可以在其中查找自己的编辑-按编辑日期排序。看,但我在分类方面有问题。请注意,我在每个文档中都有几个编辑条目 我的索引编写java代码: doc.add(new StoredField(fieldNa

我只是在用Lucene 5.5.0实现一个JSF web应用程序的搜索。在应用程序中,多个用户可以编辑文档,并将创建非常简单的(仅日期和用户名)编辑日志。例如:

2017-02-10 user15
2017-02-01 user14
2017-01-15 user15 
现在我想有一个搜索功能,用户可以在其中查找自己的编辑-按编辑日期排序。看,但我在分类方面有问题。请注意,我在每个文档中都有几个编辑条目

我的索引编写java代码:

doc.add(new StoredField(fieldName, fieldValue));
doc.add(new SortedSetDocValuesField(fieldName, new BytesRef(fieldValue)));
我的排序代码:

Sort sort = new Sort(new SortField("UserID", SortField.Type.STRING));
docs = searcher.search(finalQuery, hitsPerPage, sort);
索引正在工作,但如果我正在搜索某些内容,则会收到以下错误消息:

unexpected docvalues type SORTED_SET for field 'UserID' (expected=SORTED).
Use UninvertingReader or index with docvalues.
错误消息说我应该使用docvalues,但我已经在使用
SortedSetDocValuesField
执行此操作。实际的问题是如何消除此错误消息

我的代码是,但我将
SortedDocValuesField
更改为
SortedSETDocValuesField
。否则,在创建索引时,会出现错误
docvalues字段“UserID”在该文档中出现多次(每个字段只允许一个值)

那么,我是否必须为SortedSETDocValuesField设置特殊设置?我也看了一下,但它对我没有用,因为我使用的是字符串(希望按字母顺序排序),而不是双精度。事先非常感谢:)

对于这个问题并不重要,但对于理解我的搜索是如何在这个领域工作的:


在字段“UserID”中,我存储一个字符串“2017-02-10===user15”,我使用自定义分析器(仅用于索引)将其拆分为标记“2017-02-10”和“user15”。然后我将这些字符串添加到每个文档中。搜索时,结果(结果的确定已开始工作)应按降序排序(最高/最新日期优先)。

是的,您需要使用,而不是标准的
SortField

非常感谢,错误消息现在不见了:)。但排序并不是我想要的那样。我完全不知道Lucene现在是如何分类的。我给了Lucene字段“UserID”,它使用UTF8SortedAsunicodeparator(对于字符串应该可以),但是您有任何调试提示来确定Lucene对哪些字符串(值,而不是字段名)进行了精确排序吗?我使用像“2017-02-10===user15”这样的字符串,可能会因此而混淆。