2012-06-25 40 views
1

使用Sphinx搜索有可能在列表中的單詞位置上確定結果權重嗎?獅身人面像根據單詞位置進行搜索和排名

舉例來說,如果你有行包含以下文本列:

Row #1: "dog, bird, horse, cat" 
Row #2: "dog, bird, cat" 

,然後進行使用"dog | cat"我想列#2排名高於因爲#1兩"dog"一個或搜索和發現了"cat",但是#2的這兩個比#1更接近。

希望這是有道理的。

感謝

邁克爾

回答

1

您可以通過使用字段級的排名做到這一點。使用「SPH_RANK_EXPR」作爲您的排名,並查看字段級別因子「min_hit_pos」,以確定首先匹配哪個詞。

所有的信息可以在http://sphinxsearch.com/docs/manual-2.0.4.html#weighting

發現如果你在下面的SPH_RANK_SPH04排名算法仔細一看,它包括min_hit_pos,但只給出了信貸行,其中匹配的單詞的第一個字。

sum((4*lcs+2*(min_hit_pos==1)+exact_hit)*user_weight)*1000+bm25 

你可以做的是使用相同的算法,但改變 「2 *(min_hit_pos == 1)」 是這樣的: -

(101-IF(min_hit_pos<100,min_hit_pos,100)) 

一行將獲得額外的100重量如果在第一個單詞上匹配,則在第二個單詞上匹配99,如此匹配直到第100個單詞,之後不再給出重量。

你可以玩弄值和包括一個乘數,看看結果是否更好。

希望有所幫助。如果您有任何問題,請告訴我。

+0

我嘗試了您提供的解決方案,它確實改變了每個文檔的總體排名,但他們仍保持在相同的位置。 –

+0

作爲我上次評論的後續內容......當我在更改前運行查詢時,兩個返回的文檔都具有相同的排名。在應用更改後,排名發生變化,但他們仍然具有相同(增加)的排名並保持在同一位置。 –

0

您是否嘗試過SPH_RANK_PROXIMITY排名模式?


否則可能會更加明確,做這樣的查詢 - 用SPH_RANK_WORDCOUNT

"dog cat"/1 | "dog cat"~10 | "dog cat"~8 | "dog cat"~6 | "dog cat"~4 | "dog cat"~3 | "dog cat"~2 | "dog cat"~1 

或相似。

+0

感謝barryhunter。我嘗試了你的第二個建議,它確實有效。我發現,如果發現「狗」和「貓」彼此接近1個詞,那麼即使他們仍然在名單之後(1),他們也會被賦予相同的權重。我相信這是因爲「〜1」選項。我將不得不稍微調整一下這些數字,看看我能否實現它。謝謝。 –