【问题标题】:Avoiding keyword stuffing in SOLR避免 SOLR 中的关键字填充
【发布时间】:2017-10-11 14:14:16
【问题描述】:

我正在寻找一种方法来限制 SOLR 中“关键字填充”的影响(或消除它)。 (我们目前正在运行 SOLR 6.2.0 服务器)。 我尝试设置 omitTermFreqAndPositions="true",但是当我这样做时,一些查询会引发短语查询错误(特别是使用 G1966B 等搜索词的查询 - 可能是由于分词等)。我可以继续禁用分词并尽量避免短语查询错误,但这只会弄乱比我试图修复的更多的事情。

有人对如何限制单个字段中多个关键字匹配的影响有任何建议吗?

示例:如果我们有一个这样的描述字段:

BrandX 1200 系列 G1924B LC/MSD SL XBC 系统。 此 BrandX 1200 系列 G1924B(G 1924 B、G1924 B、G 1924B)LC/MSD SL XBC >系统状况良好。

当有人搜索“G1924B”时,我希望避免仅仅因为其中多次出现 G1924B(或其变体)而给该文档打高分。 理论上,有人可以在描述中多次重复该关键字,以试图诱使系统将其搜索结果排名更高。

有什么建议吗?

谢谢!

【问题讨论】:

    标签: solr keyword


    【解决方案1】:

    这似乎比最初想象的更频繁。 如果同时删除术语频率和位置,您将失去词组搜索功能。

    我建议编写一个忽略 TF(词频)的自定义相似度。 目前默认的BM25考虑了TF。 您可以选择该类并调整相似度计算以将 TF 视为常数。

    例如

    org.apache.lucene.search.similarities.BM25Similarity.BM25DocScorer#score

    [1] org.apache.lucene.search.similarities.BM25Similarity

    【讨论】:

    • 谢谢亚历山德罗。我从来没有做过像编写自定义相似性这样的事情,但我会开始探索这个选项。任何提示或开始这条道路的好地方将不胜感激。
    • 开发这样一个新的相似性实际上非常简单:假设您从 TF/IDF 开始(这对于您的用例来说可能是一个很好的假设):1)编写您的 ConstantTfSimilarity 来扩展:org .apache.lucene.search.similarities.ClassicSimilarity 例如,您可以只覆盖公共浮点数 tf(float freq) { return (float)Math.sqrt(freq); 2)覆盖 org.apache.solr.search.similarities.ClassicSimilarityFactory 以返回您的自定义相似度 3)在架构中设置它
    猜你喜欢
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 2018-05-27
    相关资源
    最近更新 更多