lucene 默认增强/评分与检查?

sqxo8psd  于 12个月前  发布在  Lucene
关注(0)|答案(1)|浏览(109)

bounty 18小时后到期。此问题的答案有资格获得+50声望奖励。user2017748正在寻找一个答案从一个有信誉的来源

我想弄清楚考试是如何评分的。我确实找到了关于Lucene的信息,它使用了VSM和布尔模型,但肯定是Lucene或Examine优先考虑某些索引字段,然后其他?例如,在名称/h1中出现的术语是否比在文本字段中出现的术语更能增强它?

elcex8rz

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()。

索引时间提升被预处理以提高存储效率,并被写入字段的存储,如下所示:

  • 该字段的所有增强(即在该文档中相同字段名下的所有增强)被相乘。
  • 然后,在索引时,通过Similarity对象将增强编码为归一化值:实际的编码取决于Similarity的实现,但请注意,大多数使用有损编码(例如将boost乘以文档长度或类似的,打包成一个字节!).
  • 任何索引时间标准化值的解码和整合到文档的分数中也在搜索时由相似性执行。
    改变评分-相似度

改变相似性是影响评分的一种简单方法,这是在索引时使用IndexWriterConfig.setSimilarity(Similarity)和在查询时使用IndexSearcher.setSimilarity(Similarity)完成的。确保在查询时使用与索引时相同的相似性(以便正确编码/解码范数); Lucene没有努力去验证这一点。
您可以通过配置不同的内置Similarity实现来影响评分,或者通过调整其参数,将其子类化以覆盖行为。一些实现还提供了一个模块化的API,您可以通过插入不同的组件(例如项频率归一化器)。
最后,您可以直接扩展低级Similarity来实现新的检索模型,或者使用特定于您的应用程序的外部评分因子。例如,自定义Similarity可以通过FieldCache或DocValues访问每个文档的值,并将它们集成到分数中。
请参阅org.apache.lucene.search.similarities软件包文档,了解有关内置可用评分模型以及扩展或更改相似性的信息。

相关问题