我有一个由 lucene 制作的索引,其中的每个文档都有 3 个字段,其中一个是数字字段,这是我的频率。我在我的索引中搜索,但在它之前我想按数字字段对其进行排序。有没有办法在我搜索之前按 lucene 对其进行排序?
问问题
1401 次
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
类来为您计算分数可能是一个更好的主意,扩展TFIDFSimilarity
orDefaultSimilarity
并覆盖 method tf
,尤其是。
于 2013-06-18T15:42:02.817 回答