2017-10-11 78 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)設置在架構 –