2017-10-11 90 views
0

我正在寻找一种方法来限制SOLR中“关键字填充”的效果(或消除它)。 (我们目前正在运行一个SOLR 6.2.0服务器)。 我试过设置omitTermFreqAndPositions =“true”,但是当我这样做时,有些查询会抛出短语查询错误(特别是使用搜索术语(如G1966B)的查询 - 可能是由于分词等原因)。我可以走下去禁用分词这个词,并尽量避免短语查询错误,但这只会让我想办法修补更多的东西。避免在SOLR中填充关键字

有没有人对如何限制在单场比赛的影响多个关键字的任何建议?

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

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

当某人搜索“G1924B”时,我想避免将此文档评分更高,因为它恰好在那里有几次G1924B(或其变体)。 理论上,有人可能会在描述中多次重复关键字,试图欺骗系统将搜索结果排在更高的位置。

有什么建议吗?

谢谢!

回答

0

这似乎是比最初想象的更频繁的要求。 如果您删除了词频和位置,则会丢失词组搜索功能。

我会推荐写一个忽略TF(Term Frequency)的自定义相似度。 目前默认BM25考虑TF。 您可以选择该类并调整相似性演算,以将TF视为常量。

例如

org.apache.lucene.search.similarities.BM25Similarity.BM25DocScorer#得分

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

+0

感谢的Alessandro。我从来没有做过像写自定义相似的东西,但我会开始探索这个选项。任何提示或在这条路上开始的好地方,将不胜感激。 – user3302110

+0

开发这种新的相似性其实很简单: 让我们假设你从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)设置在架构 –