使用Sphinx搜索有可能在列表中的單詞位置上確定結果權重嗎?獅身人面像根據單詞位置進行搜索和排名
舉例來說,如果你有行包含以下文本列:
Row #1: "dog, bird, horse, cat"
Row #2: "dog, bird, cat"
,然後進行使用"dog | cat"
我想列#2排名高於因爲#1兩"dog"
一個或搜索和發現了"cat"
,但是#2的這兩個比#1更接近。
希望這是有道理的。
感謝
邁克爾
使用Sphinx搜索有可能在列表中的單詞位置上確定結果權重嗎?獅身人面像根據單詞位置進行搜索和排名
舉例來說,如果你有行包含以下文本列:
Row #1: "dog, bird, horse, cat"
Row #2: "dog, bird, cat"
,然後進行使用"dog | cat"
我想列#2排名高於因爲#1兩"dog"
一個或搜索和發現了"cat"
,但是#2的這兩個比#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個單詞,之後不再給出重量。
你可以玩弄值和包括一個乘數,看看結果是否更好。
希望有所幫助。如果您有任何問題,請告訴我。
您是否嘗試過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
或相似。
感謝barryhunter。我嘗試了你的第二個建議,它確實有效。我發現,如果發現「狗」和「貓」彼此接近1個詞,那麼即使他們仍然在名單之後(1),他們也會被賦予相同的權重。我相信這是因爲「〜1」選項。我將不得不稍微調整一下這些數字,看看我能否實現它。謝謝。 –
我嘗試了您提供的解決方案,它確實改變了每個文檔的總體排名,但他們仍保持在相同的位置。 –
作爲我上次評論的後續內容......當我在更改前運行查詢時,兩個返回的文檔都具有相同的排名。在應用更改後,排名發生變化,但他們仍然具有相同(增加)的排名並保持在同一位置。 –