簡體   English   中英

按特定順序對Lucene.net搜索結果進行排序

[英]Sorting Lucene.net search results in a specific order

我們使用Lucene.Net在網站上進行產品搜索。 對於類別,我們獲取所有與字段類別完全匹配且類別唯一ID完全匹配的產品。

對於一個客戶,如果沒有其他條件,我們要求按照特定順序列出產品。 這些按類別排列,並且產品可以出現在多個類別中。 因此,我們不能只擁有一個全球訂單字段。 我首先想到的一種與開箱即用的Lucene.net兼容的解決方案是為產品上的每個類別都有一個字段,其中將包含排序順序。 但是,如果類別很多,這將無法很好地擴展。

輸入搜索詞或選擇構面后,我們將使用常規評分系統按最匹配的順序訂購產品。 但是,當僅對類別進行術語查詢時,我們希望能夠按特定順序對它們進行排序。

有沒有一種方法可以使用自定義計分器來接受ID或類似ID的列表並根據其對它們進行計分? 本質上,我們需要做的是按照數據庫表或其他外部源中指定的順序對Lucene搜索結果進行排序。

這不是開箱即用的解決方案,我們使用的是Open Search Server,我認為它是同一搜索引擎的包裝。 我們有類似的要求以及其他一系列要求(復雜的過濾/權限/安全性),這促使我們將搜索引擎的結果緩存到數據庫中(它將在后台線程中分頁結果並將其持久保存到數據庫中。 DB),之后您可以在搜索結果和數據庫中的其他表之間進行聯接,並對您的內容進行索引排序。 只是一個想法...

在高流量網站的類似解決方案中,我們自行進行了排序。 Lucene將找到結果,然后我們對它們進行即時排序並給出分頁的結果。 大多數.net排序算法都足夠有效,但是我們使用了Radix Sort( http://en.wikipedia.org/wiki/Radix_sort )使它能夠按我們的喜好執行。


我正在使用基於Lucene的Elasticsearch,並且這樣做的方法是增強希望元素排序的字段。
第二種方法是純Javascript http://isotope.metafizzy.co/ ,動態渲染元素,然后按javascript排序,請參見一些示例,它可能會對您有所幫助! 編輯:全部取決於您的邏輯:如果要按類別訂購:提升類別!

場景:用戶要求類別:移動,使用常規評分系統,假設您獲得了此結果
:用戶正在尋找諾基亞

產品1:類別:汽車,標題:諾基亞汽車,得分:3.34
產品2:類別:電器,標題:酷諾基亞電器:得分3.32
產品3:類別:手機,標題:諾基亞3310:得分2.32
產品4:類別:移動設備,標題:諾基亞6600:得分2.31


現在,如果將字段類別提升,您將具有:
產品1:類別:移動電話,標題:諾基亞3310,得分:6.35
產品2:類別:移動設備,標題:諾基亞6600:得分6.32
產品3:類別:電器,標題:其他諾基亞:得分2.32
產品4:類別:汽車,標題:諾基亞汽車:得分2.31

我使用的分數是任意的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM