2 回答

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊
除非title
實(shí)際上是 multiValued - 你的帖子可以有多個(gè)標(biāo)題 - 你應(yīng)該在你的架構(gòu)中定義它multiValued="false"
。但是,還有第二個(gè)問題——默認(rèn)類型的字段text_general
不適合排序,因?yàn)樗鼤?huì)生成多個(gè)標(biāo)記,一個(gè)標(biāo)記對(duì)應(yīng)標(biāo)題中的每個(gè)單詞。這對(duì)于搜索很有用,但在排序時(shí)會(huì)給出奇怪且不直觀的結(jié)果。
因此,改為定義一個(gè)title_sort
字段并使用帶有 和 的字段類型KeywordTokenizer
(如果您想要不區(qū)分大小寫的排序),或者如果您想要區(qū)分大小寫的排序,請(qǐng)為該字段使用已經(jīng)定義的字段類型。LowerCaseFilter
string
title_sort

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
首先要檢查的是您是否真的需要該標(biāo)題字段是多值的,或者您的文檔是否真的有多個(gè)標(biāo)題?如果沒有,您只需要通過設(shè)置來修復(fù)字段定義multivalued="false"。
也就是說,除非確定應(yīng)該使用這些多個(gè)值中的哪一個(gè)進(jìn)行排序,或者如何將它們組合成一個(gè),否則對(duì)多值字段進(jìn)行排序是沒有意義的。
假設(shè)我們需要按標(biāo)題(按字母順序)對(duì)給定的結(jié)果集進(jìn)行排序,首先使用單值標(biāo)題字段:
# Unsorted
"docs": [
{ "id": "1", "title": "One" },
{ "id": "2", "title": "Two" },
{ "id": "3", "title": "Three" },
]
# Sorted
"docs": [
{ "id": "1", "title": "One" },
{ "id": "3", "title": "Three" },
{ "id": "2", "title": "Two" },
]
# -> ok no problem here
現(xiàn)在不可能像現(xiàn)在這樣對(duì)多值字段應(yīng)用相同的邏輯,您必須確定在每個(gè)文檔中使用哪個(gè)標(biāo)題才能正確排序它們:
# Unorted
"docs": [
{ "id": "1", "title": ["One", "z-One", "a-One"] },
{ "id": "2", "title": ["Two", "z-Two", "a-Two"] },
{ "id": "3", "title": ["Three", "z-Three", "a-Three"] }
]
希望 Solr 允許通過函數(shù)的輸出對(duì)結(jié)果進(jìn)行排序,這意味著您可以使用 Solr 的任何函數(shù)查詢來“獲取”每個(gè)標(biāo)題字段的單個(gè)值。你提到的答案是一個(gè)很好的例子,即使它可能不適合你(因?yàn)闃?biāo)題需要啟用 docValues - 取決于字段定義 - 并且知道最大/最小函數(shù)應(yīng)該只與數(shù)值一起使用),只是為了得到主意 :
# here the 2nd argument is a callback to max(), used precisely to get a single value from title
sort=field(title,max) asc
添加回答
舉報(bào)