2012-03-27 40 views
0

通常在使用Lucene时,您设置了一个搜索查询,Lucene会为您提供一些结果,您可以在其中获得每个文档的分数。Lucene:检索某个元组的分数?

在我的情况下,我想改变这个过程: 我有我的数据库的元组,并希望将它传递给Lucene来接收Lucene索引中某个元组的分数。这可能吗?有谁知道如何? ;)

编辑:我当然希望我的关于某一搜索查询元组的得分...

+0

相对分数在lucene中没有语义含义。 – Reactormonk 2012-03-27 15:09:04

+0

当然,我希望我的元组的分数与某个搜索查询相关!对不起,我没有提到。 – odaa 2012-04-02 09:50:49

回答

2

我想你的元组映射到Lucene索引的文档。文件本身没有与其相关的分数;它只会得到相对于特定查询的评分。你想如何编码你的元组的分数?作为文件增强,或者可能是场增强的叠加(我假设你将元组成员映射到文档字段)+文档增强?

所以,你有一个元组和一个查询Q(可能是一个复杂的),你需要对应于该元组索引的文档的分数。首先使用简单查询(TermQuery的BooleanQuery)获取该文档的文档ID;然后调用IndexSearcher.explain(Query,int) - 这会给你它的分数而不会实际执行Q.

+0

感谢您的回答!我认为我的问题是在我的Lucene索引中搜索某个Document。我必须首先进行查询搜索,并检查我的文档是否包含在结果中?这不是很有效率,是吗?你说过我应该设置一个自定义的相似对象。那是为了改变分数,不是吗?但是我对正常分数没有问题,我认为......;)或者为什么我应该改变分数? – odaa 2012-04-02 09:48:20

+0

也许你只需要在使用Lucene时调整你的观点。执行termQuery(或其布尔查询)不是_searching_,而是_fetching_。它非常快。至于相似性,默认情况下,您会得到字段规范,词频和逆文档频率的影响。如果这就是您想要的,那么您不需要自定义相似性。 – 2012-04-02 12:54:45

+0

是的,那更多是我想要的。 :)但我仍然不明白我如何才能得到与我的元组相关的特定文档。如果我的元组有一个主键,但这并不是必需的,那将很容易。或者你说“简单查询”是什么意思? – odaa 2012-04-03 13:43:19