我正在构建一个Solr搜索引擎来搜索300k文档集。在众多索引字段中,重要的是标签。 我的想法是为每个文档分配一个标签向量,每个标签都有一个给定的权重(基本上取决于为该文档选择该标签的用户数)。例如
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”的multiValued字段,并在索引时为分配给此字段中包含的每个标记分配权重。所以,第一个问题:
是否可以在索引时手动分配术语频率(作为标记权重)?
对于我发现的......似乎不是!好的...一种解决方法是在Doc1的标签字段上复制例如tag4 10次,在Doc2的标签字段上复制8次。当然有一些缺点和局限。
然而,即使有一个解决方法,我也无法解决更大的问题。我想定义自己的分数。更符合我特定情况的那个就像sort = tf(tags,tag4)。实际上TF在这种情况下比IDF更重要!不幸的是,此功能(相关性功能)将仅在Solr 4中发布:http://wiki.apache.org/solr/FunctionQuery#tf
您是否了解如何更改Solr 3.5中的评分功能,更重视TF而不是IDF?
是否有任何黑客可以简单地执行此操作,或者您是否会更改Lucene源代码(如果是......什么以及在哪里?),或者您是否会使用Solr4之夜构建?
提前感谢您的建议!