将每个'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开始,你不必再诉诸于此。
顺便说一句,你看到的行为实际上不是一个错误。你需要以不同的方式组合你的查询来获得你想要的结果。