3

我现在使用的是solr 3.3,在查询中需要使用mod函数,但是mod函数直到4.0才存在。所以,我想使用其他功能来替换 3.3 中的 mod,比如

q=subject:mp3&fq={!frange l=1 u=1}sub(id,product(floor(div(id,2)),2)). 

但是我发现这个函数不起作用,因为 sub(id,product(floor(div(id,2)),2)) 将等于 id 即使 id 是奇数。有没有人可以在 3.3 中替换 mod 功能?谢谢

4

1 回答 1

1

如果你已经写过一些Java,应该很容易实现,只需要写一个ModFunction类(例如见div实现)。然后为它写一个ValueSourceParser,它应该是这样的:

public class ModFunctionParser extends ValueSourceParser {
  @Override
  public ValueSource parse(FunctionQParser fp) throws ParseException {
    ValueSource a = fp.parseValueSource();
    ValueSource b = fp.parseValueSource();
    return new ModFunction(a, b);
  }
}

最后,在你的 solrconfig.xml 中注册这个解析器

于 2012-09-03T09:40:49.327 回答