Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 理解Lucene查询_Search_Lucene - Fatal编程技术网

Search 理解Lucene查询

Search 理解Lucene查询,search,lucene,Search,Lucene,我想更具体地了解一下Lucene查询是如何评分的。在他们的文档中,他们提到了VSM。我熟悉VSM,但它似乎与它们允许的查询类型不一致 我尝试过单步浏览BooleanScorer2和BooleanWeight的源代码,但没有任何实际效果 我的问题是,是否有人可以通过执行BooleanScorer来解释它是如何组合查询的 此外,是否有一种方法可以简单地发送几个术语,然后按照文档中描述的方法获取这些术语的原始tf.idf分数?开始的地方是 我想这能消除你的矛盾吗?Lucene将信息检索的布尔模型(BM

我想更具体地了解一下Lucene查询是如何评分的。在他们的文档中,他们提到了VSM。我熟悉VSM,但它似乎与它们允许的查询类型不一致

我尝试过单步浏览BooleanScorer2和BooleanWeight的源代码,但没有任何实际效果

我的问题是,是否有人可以通过执行BooleanScorer来解释它是如何组合查询的

此外,是否有一种方法可以简单地发送几个术语,然后按照文档中描述的方法获取这些术语的原始tf.idf分数?

开始的地方是

我想这能消除你的矛盾吗?Lucene将信息检索的布尔模型(BM)与信息检索的向量空间模型(VSM)相结合,BM“批准”的文档由VSM评分

接下来要看的是Searcher.explain,它可以为您提供一个字符串,解释如何计算(查询、文档)对的分数

我认为,跟踪BooleanScorer的执行过程可能是一个挑战,首先理解BooleanScorer2可能是最容易的,它使用了ConnectionsCorer/DisjunctionSumScorer等子核心,并将BooleanScorer视为一种优化

如果这令人困惑,那么从TermScorer开始更简单。就我个人而言,我认为它是“干杯”:

  • 一个查询在整个索引中创建一个有效的权重:它包含boost、idf、queryNorm,甚至令人困惑的是,包含该术语的任何“外部”/“父级”查询(如booleanquery)的boost。此权重只计算一次
  • 权重为每个索引段创建一个计分器(例如TermScorer),对于单个术语,该计分器在公式中拥有它所需的一切,但与文档相关的内容除外:文档内术语频率(TF),它必须从日志中读取,以及文档的长度标准化值(norm)。这就是为什么termscorer将文档评分为weight*sqrt(tf)*norm。实际上,这是为tf值<32而缓存的,因此大多数文档的评分都是一次乘法
  • BooleanQuery实际上做的“不多”,除了它的计分员负责下一个Doc()和advance()的子计分员外,当布尔模型满足时,它结合子计分员的分数,根据匹配的子计分员数量应用协调工厂(coord())
一般来说,很难通过lucene对文档进行评分,因为在所有发布的表单中,评分员都负责两件事:匹配和计算分数。在Lucene的后备箱里(http://svn.apache.org/repos/asf/lucene/dev/trunk/)它们现在是分开的,以这样一种方式,相似性基本上负责评分的所有方面,这与匹配是分开的。因此,API可能更容易理解,也可能更难理解,但如果您感到困惑,至少可以参考许多其他评分模型(BM25、语言模型、与随机性的差异、基于信息的模型)的实现:

开始的地方是

我想这能消除你的矛盾吗?Lucene将信息检索的布尔模型(BM)与信息检索的向量空间模型(VSM)相结合,BM“批准”的文档由VSM评分

接下来要看的是Searcher.explain,它可以为您提供一个字符串,解释如何计算(查询、文档)对的分数

我认为,跟踪BooleanScorer的执行过程可能是一个挑战,首先理解BooleanScorer2可能是最容易的,它使用了ConnectionsCorer/DisjunctionSumScorer等子核心,并将BooleanScorer视为一种优化

如果这令人困惑,那么从TermScorer开始更简单。就我个人而言,我认为它是“干杯”:

  • 一个查询在整个索引中创建一个有效的权重:它包含boost、idf、queryNorm,甚至令人困惑的是,包含该术语的任何“外部”/“父级”查询(如booleanquery)的boost。此权重只计算一次
  • 权重为每个索引段创建一个计分器(例如TermScorer),对于单个术语,该计分器在公式中拥有它所需的一切,但与文档相关的内容除外:文档内术语频率(TF),它必须从日志中读取,以及文档的长度标准化值(norm)。这就是为什么termscorer将文档评分为weight*sqrt(tf)*norm。实际上,这是为tf值<32而缓存的,因此大多数文档的评分都是一次乘法
  • BooleanQuery实际上做的“不多”,除了它的计分员负责下一个Doc()和advance()的子计分员外,当布尔模型满足时,它结合子计分员的分数,根据匹配的子计分员数量应用协调工厂(coord())

一般来说,很难通过lucene对文档进行评分,因为在所有发布的表单中,评分员都负责两件事:匹配和计算分数。在Lucene的后备箱里(http://svn.apache.org/repos/asf/lucene/dev/trunk/)它们现在是分开的,以这样一种方式,相似性基本上负责评分的所有方面,这与匹配是分开的。因此,API可能更容易理解,也可能更难理解,但如果您感到困惑,至少可以参考许多其他评分模型(BM25、语言模型、与随机性的差异、基于信息的模型)的实现:

对不起,如果我问你,但是有理由不接受RObert的答案吗?看来他把一切都解释清楚了!对不起,如果我问你,你有理由不接受罗伯特的回答吗?看来他把一切都解释清楚了!