【问题标题】:Extending / changing how Zend_Search_Lucene searches扩展/改变 Zend_Search_Lucene 的搜索方式
【发布时间】:2010-05-12 12:21:52
【问题描述】:

我目前正在使用 Zend_Search_Lucene 来索引和搜索目前大约 1000 个左右的文档。我想做的是从当前的默认值更改引擎对文档的评分方式。

Zend_Search_Lucene 对文档中点击次数的频率进行评分,因此具有 10 个匹配词 PHP 的文档将比仅匹配 3 个 PHP。我想要做的是传递一些关键词并根据这些关键词的点击率来评分。例如

我通过5个关键词说,PHPMySQLJavascriptHTMLCSS 我搜索的索引。一份文档与这些关键词有 3 个匹配项,一份文档具有全部 4 个匹配项,其中 4 个匹配项得分最高。文档中这些词的实例数量与我无关。

现在我已经快速浏览了 Zend_Search_Lucene_Search_Similarity,但是我必须承认我不确定(或那么聪明)知道如何使用它来实现我所追求的目标。

使用 Lucene 可以实现我想要做的事情还是有更好的解决方案?

【问题讨论】:

    标签: php zend-framework search lucene zend-search-lucene


    【解决方案1】:

    对于我在手册的Zend_Search_Lucene_Search_Similarity section 中所理解的内容,我将首先扩展默认的相似性类以覆盖 tf(词频)方法,这样它就不会改变分数:

    class MySimilarity extends Zend_Search_Lucene_Search_Similarity {    
        public function tf($freq) {
            return 1.0; // overriding default sqrt($freq);
        }
    }
    

    这种方式不应该考虑匹配的数量。你觉得这样就够了吗?

    然后,将其设置为索引前的默认相似度算法:

    Zend_Search_Lucene_Search_Similarity::setDefault(new MySimilarity());
    

    【讨论】:

    • 这在一定程度上提高了文档的评分,但还有一些工作要做,我认为也可以通过提升关键术语来帮助。再次感谢。
    猜你喜欢
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多