2013-01-16 38 views
3

我有一組用戶。每個用戶都有一些字段。其中一個字段是一張地圖,如女巫的「key,value」值,該值代表訂單。索引對<key, value>並返回按Solr值排序的結果

例如:

user1有:

id = user1 
tags = <apples, 100>, <bananas, 80>, <oranges, 60> 
name = "Ann Miller" 
likes = "apples and skydiving, and sometimes solving puzzles" 
quote = "Never spent a day without a smile!" 

user2有:

id = user2 
tags = <bananas, 100>, <pears, 80>, <apples, 60> 
name = "Mike Anderson" 
likes = "sleep and eating pizza" 
quote = "Math, it's a puzzle to me. I love figuring out puzzles." 

我想在喜歡返回用戶一般搜索的東西:

search | result order 
--------+-------------------- 
smile | user1 
puzzle | user2, user1 
bananas | user2, user1 
apples | user1, user2 

目前我有一個一般的提交給女巫我複製每個字段的值,然後我在該字段上進行搜索。現在我只把對中的鑰匙放在裏面,所以排序不是我想要的。

我使用SolrJ索引文檔(從數據庫中提取)並進行搜索。

我曾經想過重複100次蘋果,80次香蕉等字樣,但是這讓我感到極其痛苦和緩慢(除了不是一個很好的方法)。

你們有沒有任何想法?

回答

1

對安德烈的建議工作,解決方案可能是在這些線路:

  • 指數值動態字段(例如,如banana_value中的*_value)。
  • 使用eDisMax query parserboost or bf您的搜索結果使用類似bf=field($value_field)的東西,其中value_field是您使用SolrJ指定的附加參數。通過這個參數,您將提供查詢詞+動態字段後綴(例如banana_value),並且,由於函數查詢field,您將獲得該特定對的值並相應地提升結果。
0

嗯我不知道,但我認爲這是不可能的...一個排序字段必須單值(多值沒有意義),我想你有一個多值字段。

現在讓我們假設你將地圖的每個值作爲動態字段(字段名稱是鍵值,字段值是相應的權重)......在這裏你解決了單值問題,但是你又得到了另一個有趣的問題......排序字段的名稱不能在查詢時確定,因爲它取決於搜索匹配...