我有一个由lucene制作的索引,其中的每个文件都有3个字段,其中一个是数字字段,这是我的频率。我在我的索引中搜索但在它之前我想用数字字段对它进行排序。在我搜索之前有什么方法可以通过lucene对它进行排序吗?
答案 0 :(得分: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
或DefaultSimilarity
,并覆盖方法tf
,特别是。