bounty 18小时后到期。此问题的答案有资格获得+50声望奖励。user2017748正在寻找一个答案从一个有信誉的来源。
我想弄清楚考试是如何评分的。我确实找到了关于Lucene的信息,它使用了VSM和布尔模型,但肯定是Lucene或Examine优先考虑某些索引字段,然后其他?例如,在名称/h1中出现的术语是否比在文本字段中出现的术语更能增强它?
bounty 18小时后到期。此问题的答案有资格获得+50声望奖励。user2017748正在寻找一个答案从一个有信誉的来源。
我想弄清楚考试是如何评分的。我确实找到了关于Lucene的信息,它使用了VSM和布尔模型,但肯定是Lucene或Examine优先考虑某些索引字段,然后其他?例如,在名称/h1中出现的术语是否比在文本字段中出现的术语更能增强它?
1条答案
按热度按时间elcex8rz1#
Examine是一个位于Lucene.NET之上的库,Lucene.NET是一个高性能搜索引擎库,Lucene的得分很大程度上取决于文档的索引方式。
如果你检查Lucene的
IndexSearcher.explain(Query, doc)
,你会看到Query决定了哪些文档匹配(二元决策),而Similarity决定了如何为匹配的文档分配分数。来自同一Lucene文档的更多细节;
字段和文档
在Lucene中,我们正在评分的对象是Documents。文档是Fields的集合。每个字段都有关于如何创建和存储(标记化,存储等)的semantics。值得注意的是,Lucene评分工作在Fields上,然后将结果组合起来返回Documents。这很重要,因为具有完全相同内容的两个文档,但是一个文档在两个字段中具有内容,而另一个文档在一个字段中具有内容,由于长度归一化,可能会为相同的查询返回不同的分数。
分数提升
Lucene允许通过在不同时间“提升”来影响搜索结果:
*索引时提升,在文档添加到索引之前调用Field.setBoost()。
*查询时提升通过在查询子句上设置提升,调用Query.setBoost()。
索引时间提升被预处理以提高存储效率,并被写入字段的存储,如下所示:
改变评分-相似度
改变相似性是影响评分的一种简单方法,这是在索引时使用IndexWriterConfig.setSimilarity(Similarity)和在查询时使用IndexSearcher.setSimilarity(Similarity)完成的。确保在查询时使用与索引时相同的相似性(以便正确编码/解码范数); Lucene没有努力去验证这一点。
您可以通过配置不同的内置Similarity实现来影响评分,或者通过调整其参数,将其子类化以覆盖行为。一些实现还提供了一个模块化的API,您可以通过插入不同的组件(例如项频率归一化器)。
最后,您可以直接扩展低级Similarity来实现新的检索模型,或者使用特定于您的应用程序的外部评分因子。例如,自定义Similarity可以通过FieldCache或DocValues访问每个文档的值,并将它们集成到分数中。
请参阅org.apache.lucene.search.similarities软件包文档,了解有关内置可用评分模型以及扩展或更改相似性的信息。