2013-03-12 124 views
2

是否可以有条件地执行FilterQuery(fq)?Solr中的条件筛选查询

换句话说:只有在特定条件为真时才执行它。

例子:

我有多个城市和他们在我的Solr数据库的地理位置。而且我另外储存它们是重要的。现在我想查询某个地理位置范围内的所有城市,但也总是返回重要城市。

或者在类似SQL的语法(我知道这是可怕的,甚至不是正确的SQL,但它说明了我的需要):

select * 
from cities 
having distance(cityname, 30, 30) or important(cityname) 

到目前为止,我还没有发现这样的事情。我可以在自定义过滤器查询中做到这一点,但我宁愿不想这样做:)。

在此先感谢。

编辑:我想用它来

实战性的东西:

{!geofilt pt=30.2,23.0 sfield=locationCoordinates d=20 cost=20} or nationWide:true 

EDIT2:

解决方案:

map(query({!geofilt pt=20.3,30.2 sfield=locationCoordinates d=1}, -1), -1, -1, nationWide:true) 

负值应确定使用在这种情况下: http://www.solrtutorial.com/solr-search-relevancy.html

回答

2

您可以尝试使用FunctionQuery。有预建的功能可用,或者您可以write a custom Function Query

既然你提到了城市,我很想指点你Geohash function,但我不确定这是你在找什么。

+0

请问您能详细说明一下给出的例子吗? – 2013-03-12 16:09:45

+0

geohash并不是我所需要的。 – 2013-03-12 16:21:25

+0

你能用数学公式表达你的距离计算吗?我不太擅长这个计算。 – 2013-03-12 16:25:36