將每個'AND'部分查詢放入Solr過濾器查詢('fq'參數)中,併爲關鍵字搜索相關性留下'q'。在你的字段列表('fl'param)中,你可以通過函數查詢返回距離:fl=*,dist:geodist()
。像'pt'和'sfield'這樣的其他參數是必需的。要排序,請使用sort=geodist() asc
。
但是,在v4.5之前的Solr版本中,不能使用空間「RPT」字段的geodist()
函數查詢。我看到你正在使用4.4。如果您需要在Solr 4.2到4.4中對RPT字段進行排序(只有在您有多個位置時才需要),那麼您必須以不同的方式處理這個問題,並且您的嘗試很接近。我建議你總是使用'q'和'fq'參數,因爲你通常應該使用它們(分別是關鍵字和過濾器)。考慮到我的查詢的這個echoParams輸出到Solr:
"indent":"true",
"wt":"json",
"sort":"query({!bbox v='' filter=false score=distance}) asc",
"fl":"*,score,dist:query({!bbox v='' filter=false score=distance})",
"sfield":"geo",
"pt":"33.3232,-83.383",
"d":"150",
"q":"*:*",
"fq":"{!bbox}",
"fq":"id:9220"
是的,這是醜陋的。再次,從Solr 4.5開始,你不必再訴諸於此。
順便說一句,你看到的行爲實際上不是一個錯誤。你需要以不同的方式組合你的查詢來獲得你想要的結果。