2

我有一个由 lucene 制作的索引,其中的每个文档都有 3 个字段,其中一个是数字字段,这是我的频率。我在我的索引中搜索,但在它之前我想按数字字段对其进行排序。有没有办法在我搜索之前按 lucene 对其进行排序?

4

1 回答 1

3

在搜索之前进行排序实际上并没有多大意义,因为 Lucene 正在创建一个倒排索引来进行搜索,而不是存储和搜索一组连续的文档。

但是,听起来您想要运行搜索并获得已经以指定方式排序的结果。

这是通过将Sort传递给IndexSearcher.search调用来完成的,例如:

SortField field = new SortField("frequency", SortField.Type.FLOAT);
//Sorting, first, by "frequency", then by relevance score
Sort sort = new Sort(field, Sort.FIELD_SCORE);
searcher.search(query, maxDocs, sort);

该字段的名称让我想知道您是否没有重新发明轮子。Lucene 已经将术语频率纳入其相关性分数。如果您想调整这种评分,那么创建一个自定义Similarity类来为您计算分数可能是一个更好的主意,扩展TFIDFSimilarityorDefaultSimilarity并覆盖 method tf,尤其是。

于 2013-06-18T15:42:02.817 回答