如何在zend-search lucene中正确地整合“受欢迎程度”因素是最佳方式?

4
我已经阅读了这篇文章,但仍然有些困惑,不知道如何准确地操作。
我有一个未索引的字段,用于计算一组播放列表的投票数,并对其进行搜索。主要搜索功能正常,但我也想将投票字段作为算法的一部分,并且不确定如何将非索引字段包含在内。是否可以提供任何指导或示例?
1个回答

1

您不一定需要调整评分算法(顺便提一下,它实现了tf-idf)。

如果您只想将浏览次数整合到评分计算中,可以在将其添加到索引之前“增强”搜索文档,例如:

$doc = new Zend_Search_Lucene_Document();
$boostFactor = 0.1;
$doc->boost = (float)$numberOfVotes * $boostFactor;
// ..
$index->addDocument($doc);
$index->commit();

在这个例子中,增强因素并不是很相关,因为您只有一个提升标准。如果您想要增强非线性关系,您还可以在 $numberOfVotes 上使用 expsqrt
但另一个问题是:
为什么不直接使用 ElasticSearch(或其他高效的搜索引擎)呢?
例如,ElasticSearch比Zend Lucene的PHP实现更强大、更快速。它非常容易与评分机制结合使用,例如http://www.elasticsearch.org/guide/reference/query-dsl/custom-score-query.html 您可以使用类似 Elastica 的PHP客户端与之配合使用。

谢谢。这个很好用。您能否解释一下哪些情况更适合使用线性增强,哪些情况更适合使用指数或平方根增强?我想了解更多关于指数或平方根增强的利弊。我大致了解指数或平方根增强会做什么,我只是在寻找实际场景/示例,以便更好地衡量应该使用哪种方法。我认为在这种情况下,我应该使用平方根,以便在处理大量投票时不会使搜索词被压倒。 - user1935733
另外,感谢提供 ElasticSearch 的链接。如果我在使用 zend lucene 时遇到性能问题,我可能会考虑切换搜索引擎。我主要使用它是因为它恰好是我遇到的第一个似乎符合我的需求并且有一个不错的设置示例可供参考的搜索引擎。 - user1935733

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接