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
Solr 考虑到与每个文档相关的标签权重,如何按标签排序?_Solr_Tags_Scoring_Tf Idf - Fatal编程技术网

Solr 考虑到与每个文档相关的标签权重,如何按标签排序?

Solr 考虑到与每个文档相关的标签权重,如何按标签排序?,solr,tags,scoring,tf-idf,Solr,Tags,Scoring,Tf Idf,我正在建立一个Solr搜索引擎来搜索30万个文档集。在众多索引字段中,一个重要的字段是标记。 我的想法是为每个文档分配一个标签向量,每个标签都有一个给定的权重(基本上取决于为该文档选择该标签的用户数量)。比如说 Doc1={tag1:0.3,tag2:0.7,tag3:0.8,tag4:1} Doc2={tag2:0.5,tag3:0.8,tag4:0.8,tag5=0.9} 使用这个示例,当有人要求使用标记为tag4的文档时,我当然会返回这两个文档,但是Doc1的得分最高,因为它的tag4权重

我正在建立一个Solr搜索引擎来搜索30万个文档集。在众多索引字段中,一个重要的字段是标记。 我的想法是为每个文档分配一个标签向量,每个标签都有一个给定的权重(基本上取决于为该文档选择该标签的用户数量)。比如说

Doc1={tag1:0.3,tag2:0.7,tag3:0.8,tag4:1}

Doc2={tag2:0.5,tag3:0.8,tag4:0.8,tag5=0.9}

使用这个示例,当有人要求使用标记为tag4的文档时,我当然会返回这两个文档,但是Doc1的得分最高,因为它的tag4权重更高

理想情况下,在Solr上实现这一点的方法类似于创建一个称为“tags”的多值字段,并在索引时为该字段中包含的每个标记分配一个权重。因此,第一个问题:

是否可以在索引时手动指定术语频率(作为标记宽度)

根据我的发现。。。似乎不是!好啊一种解决方法是在Doc1的tags字段上复制tag4 10次,在Doc2的tags字段上只复制8次。当然也有一些缺点和局限性

然而,这里有一个更大的问题,我无法解决,即使有一个变通办法。我想定义我自己的分数。更适合我的具体情况的是类似sort=tf(tags,tag4)的东西。事实上,在这种情况下,TF比IDF重要得多!不幸的是,此功能(关联函数)将在Solr 4中发布:

您是否知道如何更改Solr 3.5中的评分函数,使TF更为重要而IDF更少

有没有什么黑客可以简单地做到这一点,或者你会改变Lucene的源代码(如果有……什么和在哪里?),或者你会使用Solr4 night构建


提前感谢您的建议

这对一个问题来说太多了。你们提到了文本搜索的理论背景——而索尔应该把它们抽象出来;和修改源代码。请下载Solr的最新稳定副本,定义您的模式,上载一些测试文档并运行所需的查询。如果你不能提出一个好的查询,或者查询对你的模式来说似乎很难处理,那么在这里问一个问题。是的,我的问题从信息检索技术到lucene源代码。问题只是一个,我把它分成两个问题。当然,我已经在使用Solr的最后一个稳定版本,我已经实现了我的模式,并且已经尝试执行我需要的查询。主要的一点是,SOLR3.5不支持相关函数。因此,我正在寻找另一种解决方案。。。