热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SOLR中实现自定义评分函数FunctionQuery

SOLR项目应用中,需要对搜索结果自定义排序,比如对一些质量好的网站权重高点。这里就需要定义一个自定义的valueSourceParser来实现。先实现一个自定义的&#xf

SOLR项目应用中,需要对搜索结果自定义排序,比如对一些质量好的网站权重高点。这里就需要定义一个自定义的valueSourceParser来实现。

先实现一个自定义的:B258DynamicSourceParser。主要代码如下:

public class B258DynamicSourceParser extends ValueSourceParser{public ValueSource parse(FunctionQParser fp) throws SyntaxError {String first = fp.parseArg();String second = fp.parseArg();ValueSource v1 = getValueSource(fp, first);return new B258DynamicSource(v1,second);}public ValueSource getValueSource(FunctionQParser fp, String arg) {if (arg == null) return null;SchemaField f = fp.getReq().getSchema().getField(arg);if (f.getType().getClass() == DateField.class) {throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Can't use ms() function on non-numeric legacy date field " + arg);}return f.getType().getValueSource(f, fp);}}

同时定义一个B258DynamicSource类。

public class B258DynamicSource extends ValueSource{public String str;public ValueSource field;public B258DynamicSource(ValueSource v1,String str){this.field = v1;this.str = str;}@Overridepublic FunctionValues getValues(Map context,AtomicReaderContext readerContext) throws IOException {final FunctionValues fieldVals = field.getValues(context, readerContext);return new FloatDocValues(this) {@Overridepublic float floatVal(int doc) {String domain = fieldVals.strVal(doc);//根据domain做不同的权重加权float f = 10f;return f;}@Overridepublic String toString(int doc) {return name() + '(' + fieldVals.strVal(doc) + ')';}};}@Overridepublic boolean equals(Object o) {// TODO Auto-generated method stub//重要return true;}@Overridepublic int hashCode() {// TODO Auto-generated method stubreturn 0;}@Overridepublic String description() {return name();}public String name() {return "b258dynamic";}}

定义好了Funtion后,需要在solrconfig.xml中定义该插件并引用。

在对应的solr.StandardRequestHandler节点中通过下面代码来引用。

258text0.8brb258dynamic(domain,dd)


推荐阅读
author-avatar
手机用户2602889575
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有