SOLR中实现自定义评分函数FunctionQuery
来源:互联网 发布:新农合软件 编辑:程序博客网 时间:2024/04/30 15:07
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) { @Override public float floatVal(int doc) { String domain = fieldVals.strVal(doc);//根据domain做不同的权重加权 float f = 10f; return f; } @Override public 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中定义该插件并引用。
<valueSourceParser name="b258dynamic" class="org.lifeba.lucene.queries.function.B258DynamicSourceParser" />
在对应的solr.StandardRequestHandler节点中通过下面代码来引用。
<lst name="defaults"> <str name="defType">258</str> <str name="qf">text</str> <str name="tie">0.8</str> <str name="boost">br</str> <str name="dynamic">b258dynamic(domain,dd)</str> </lst>
0 0
- SOLR中实现自定义评分函数FunctionQuery
- 如何实现自定义的solr FunctionQuery
- solr 自定义函数 评分函数
- solr之functionQuery(函数查询)
- solr之functionQuery(函数查询)
- Solr --- 函数查询(FunctionQuery)
- Solr 函数查询(FunctionQuery)原理分析
- solr 相关度评分,自定义评分
- functionQuery(函数查询)
- Solr 6.0 学习(十六)FunctionQuery
- lucene实现自定义的评分
- 关于Solr评分修改
- Solr评分修改
- solr 评分机制
- solr评分机制
- Solr评分排序机制
- angularJs 自定义指令实现星级评分功能
- Android自定义Ratingbar星星实现评分
- Windows客户端C/C++编程规范“建议”——指针
- windows 下在一个进程中使用createprocess创建一个窗口进程,并获取这个窗口的HWND句柄
- hdu1284钱币兑换问题(母函数)
- Android Gson
- 整合struts1时web.xml里的配置
- SOLR中实现自定义评分函数FunctionQuery
- vim的一些实用技巧
- UVA 10090 Marbles(扩展欧几里得)
- C/C++/Qt 统计运行时间
- UVa 1382 Distant Galaxy 解题报告(枚举 + 前缀和)
- U-Boot操作Flash (NOR, NAND & SPI)
- 工资两三千,你的未来在哪里,马云——写给在工厂上班的同学们
- STL 源码剖析 算法 stl_algo.h -- search
- 经纬财富:鹤岗亏损是因为不懂资金管理