Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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
Apache Solr';s奇怪的搜索相关性排名_Solr - Fatal编程技术网

Apache Solr';s奇怪的搜索相关性排名

Apache Solr';s奇怪的搜索相关性排名,solr,Solr,我正在使用ApacheSolr对计算机的一些内部文档(存储在数据库中)进行搜索查询。对于按相关性递减排序的搜索查询,我得到了非常奇怪的结果。例如,我的搜索查询中有5个单词。4个结果中最相关的是一个文档,多次只包含其中的2个单词。唯一包含所有单词的文档是最后一个。如果我以正确的方式更改单词,那么我会看到一个更好的排名顺序,正确的文章是最相关的。我该如何着手解决这个问题?在我看来,包含所有5个单词的文档应该比仅包含其中两个单词(更频繁地陈述)的文档排名更高 Solr所做的是一个正确的算法,称为。 在

我正在使用ApacheSolr对计算机的一些内部文档(存储在数据库中)进行搜索查询。对于按相关性递减排序的搜索查询,我得到了非常奇怪的结果。例如,我的搜索查询中有5个单词。4个结果中最相关的是一个文档,多次只包含其中的2个单词。唯一包含所有单词的文档是最后一个。如果我以正确的方式更改单词,那么我会看到一个更好的排名顺序,正确的文章是最相关的。我该如何着手解决这个问题?在我看来,包含所有5个单词的文档应该比仅包含其中两个单词(更频繁地陈述)的文档排名更高

Solr所做的是一个正确的算法,称为。 在你的例子中,顺序可以用这个公式来解释

一种可能的解决方案是忽略TF-IDF分数并将文档中的一个命中数计算为一,而不是简单地将文档中的5个匹配项计算为5分,4个匹配项计算为4分,以此类推。恒定分数查询可以实现以下目的:

使用^=创建常量分数查询,其中 将整个子句设置为任何文档的指定分数 符合该条款。当你只关心别人的时候,这是可取的 匹配特定子句,不需要其他相关因素 例如术语频率(术语出现在列表中的次数) 字段)或反向文档频率(整个索引的度量值 一个术语在一个领域中的罕见程度)

查询的可能示例:

text:Julian^=1 text:Cribb^=1 text:EPA^=1 text:peak^=1 text:oil^=1

另一个需要一些脚本的解决方案是这样的,首先你需要一个查询,其中你将询问所有内容是否包含确切的5个元素,例如
+Julian+Cribb+EPA+peak+oil
,然后你将对5个元素中的4个进行相同的组合,如果我没有弄错的话,它将需要额外的5个查询和返回,直到您检查所有内容,直到1个强制性条款。然后,您将获得完整的结果,如果您决定5个匹配的文档总是比4个匹配的文档好,那么您只需要将结果合并或将它们串联起来。此解决方案的缺点是:大量查询需要以编程方式运行,一些脚本会有所帮助,规范化并不明显。优点-您将保留TF-IDF和匹配项的概念。

Solr所做的是一个正确的算法,称为。 在你的例子中,顺序可以用这个公式来解释

一种可能的解决方案是忽略TF-IDF分数并将文档中的一个命中数计算为一,而不是简单地将文档中的5个匹配项计算为5分,4个匹配项计算为4分,以此类推。恒定分数查询可以实现以下目的:

使用^=创建常量分数查询,其中 将整个子句设置为任何文档的指定分数 符合该条款。当你只关心别人的时候,这是可取的 匹配特定子句,不需要其他相关因素 例如术语频率(术语出现在列表中的次数) 字段)或反向文档频率(整个索引的度量值 一个术语在一个领域中的罕见程度)

查询的可能示例:

text:Julian^=1 text:Cribb^=1 text:EPA^=1 text:peak^=1 text:oil^=1

另一个需要一些脚本的解决方案是这样的,首先你需要一个查询,其中你将询问所有内容是否包含确切的5个元素,例如
+Julian+Cribb+EPA+peak+oil
,然后你将对5个元素中的4个进行相同的组合,如果我没有弄错的话,它将需要额外的5个查询和返回,直到您检查所有内容,直到1个强制性条款。然后,您将获得完整的结果,如果您决定5个匹配的文档总是比4个匹配的文档好,那么您只需要将结果合并或将它们串联起来。此解决方案的缺点是:大量查询需要以编程方式运行,一些脚本会有所帮助,规范化并不明显。优点-您将保留TF-IDF和匹配术语的概念。

您可以发布您正在进行的查询以及顶部和底部的文档吗?我的搜索查询是“Julian Cribb EPA peak oil”。最相关的文件只是提到朱利安2次和克里布5次。“朱利安·克里布”一词在本文件中出现了两次。第二个包含两次“克里布”,“朱利安”和一次“峰值石油”。第三个包含“朱利安”一次和“克里布”一次(但不在一起,因为克里布没有突出显示)。最后一种含有EPA 3次,峰值油一次,朱利安一次,克里布一次。所有4个标题都包含“Cribb”。请在请求中添加&wt=xml&debug=true,并在中提供视图源的输出。我不确定如何在solr中运行此请求。我在浏览器的localhost/solr/#页面的“q”输入字段中使用了完全不同的语法,如index_content:julian cribb EPA peak oil(或在我的PHP程序中的solr PHP客户端搜索函数中运行相同的字符串)。这是我使用Solr的第一周,请原谅我。只需将这些参数添加到浏览器的原始查询参数中即可看到结果。这是一个术语频率的问题,你可以发布你正在做的查询以及位于顶部和底部的文档吗?我的搜索查询是“Julian Cribb EPA peak oil”。最相关的文件只是提到朱利安2次和克里布5次。“朱利安·克里布”一词在本文件中出现了两次。第二个包含两次“克里布”,“朱利安”和一次“峰值石油”。第三个包含“朱利安”一次和“克里布”一次(但不在一起,因为克里布没有突出显示)。最后一种含有EPA 3次,峰值油一次,朱利安一次,克里布一次。所有4个标题都包含“Cribb”。请在请求中添加&wt=xml&debug=true,并在中提供视图源的输出。我不确定如何在solr中运行此请求。我使用了一种完全不同的语法,比如index_content:julian cribb EPA peak oil,在我的b上localhost/solr/#页面的“q”输入字段中