`
suichangkele
  • 浏览: 200472 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

solr(lucene)中的value source

阅读更多

在上一篇博客中已经说了,valueSource就是获得一个doc的某些值,这个值可以是doc的某些域的值,也可以是现计算的一些函数值,这个博客里面就说一下solr中已经存在的valueSource。

 valueSource的实现类有很多,在solr的源码中我看到了有:

  1、ConstantNumberSource,即所有的doc都共享一个值得valueSource,这个类还有很多子类,待用到时再看吧。

  2、有关距离的,用在地图计算上的valueSource,存在于lucene的spatial包里面,这个因为我没有用到,也没看。

  3、有关倒排表长度、idf、tf的valueSource,

     DocFreqValueSource:这个是计算一个指定的term的倒排表的长度的valueSource,在构造方法中就要传进去要查询的域和term的字符串。最后返回的FunctionValues是一个ConstIntDocValues,他里面的所有的doc都是同一个值,即要查询的term的倒排表的长度,也就是docFrequence。

     IDFValueSource:这个和上面的DocFreqValueSource类似,只不过他不是计算一个term的docFre,而是计算一个term的idf值,最后返回的也是一个常数的FunctionValues.

     TermFreqValueSource:这个是查询指定的term的倒排表中的所有的doc中含有这个term的次数的值得valueSource。

     TFValueSource:这个和上面的TermFreqValueSource是类似的,只不过是返回最后经过tf函数计算的值,而上面是返回term frequence的真实值,没有经过函数计算。

  4、DualFloatFunction,从字面上理解,这个是两元的浮点类型的函数,看了源码就知道,他是对两个valueSource,根据一定的函数,计算两个值的函数值的valueSource,是一个抽象类,他的具体实现类都实现了具体的函数,比如相加的,相除的,相乘的,这些简单的函数都是solr自己带的,在solr的ValueSourceParser的代码里面可以发现这些。

    他的很多实现都是静态内部类,所以我这里就不记录了,在solr中存在的有:相除的----DivFloatFunction(在solr中的名字是div),也就是用一个值除以另一个值,相减的,在solr中的名字是ms,取模的,在solr中的名字是mod,

  5、FieldCacheSource,这个就是从FieldCache中获得值得valueSource,很简单。他有很多实现类。

 

在solr中我们最终使用的是valueSource,但是我们在调用solr的api的时候,只能传字符串,所以需要一个解析器,这个和我们使用的queryParser的道理是一致的,在solr中解析valueSource的类叫做valueSourceParser(类比于queryParser),我们看一下这个类,就知道solr自带的有哪些valueSource了。在这个类中,有个一静态的map(类比于QParserPlugin中的数组),就是实现了valueSourceParser的名字到实例的映射。

/* standard functions */
public static Map<String, ValueSourceParser> standardValueSourceParsers = new HashMap<String, ValueSourceParser>();

 在他的静态块里面,就会初始化很多的parser,放到数组里面,以后我们在使用FunctionQuery的时候,最终在计算得分的时候,就是根据传递过来的参数从这个map中查找具体的valueSourceParser,然后使用这个parser计算一个valueSource,用于排序。当然我们也可以自定义valueSourceParser,只要继承自这个valueSourceParser,实现他的parse(FunctionQParser)方法,最后返回一个valueSource。当然还需要在solrConfig中配置一下

 

<valueSourceParser name="myfunc" class="com.....MyValueSourceParser"/>  

这样我们就可以实现自己的valueSourceParser来实现自己需要的而solr没有提供的函数了。 

 

  

另外,还有一个地方需要注意,在solr的facet的时候,有的情况会的使用valueSource(比如在facet field的时候,会优先使用valueSource),那么valueSource是怎么获得最后的值得呢?在solr的FieldType里面有这么一个方法:org.apache.solr.schema.FieldType.getValueSource(SchemaField, QParser),可以发现就是从FiledCache中获得valueSource值,也就是说在solr中通过FieldType获得valueSource就是使用了FieldCache,也就是会优先从docValue里面查找,如果查不到再从词典表里面查找。

分享到:
评论

相关推荐

    lucene,solr的使用

    - **使用方式**:Lucene通常作为库直接集成到应用程序中,而Solr则作为一个独立的服务运行。 - **功能丰富程度**:Solr相对于Lucene来说,提供了更多高级功能,如分面搜索、自动完成等。 - **集群支持**:Solr支持...

    Apache Solr lucene 搜索模块设计实现

    Apache Solr 和 Lucene 是两个在全文搜索领域广泛使用的开源框架。它们的组合为构建高效、可扩展的搜索引擎提供了强大的工具。以下是对这两个组件及其在搜索模块设计实现中的关键知识点的详细说明: 1. **Apache ...

    Solr Elasticsearch lucene 搜索引擎

    Solr、Elasticsearch和Lucene是三个在搜索引擎领域中至关重要的技术,它们共同构建了现代数据检索的基础架构。下面将分别对这三个组件进行详细解释,并探讨它们之间的关系。 **Lucene** Lucene是一个高性能、全文本...

    Lucene实战源码(Lucene in Action Source Code)part1

    在实际应用中,Lucene通常与其他技术结合使用,例如Solr或Elasticsearch,它们提供了更高级的功能,如分布式搜索、集群管理和RESTful API。这部分源码可能未涵盖这些,但对理解Lucene的基本工作原理和内部机制非常有...

    paoding-webx3-solr-lucene

    在"paoding-webx3-solr-lucene"中,Paoding扮演着将用户输入的中文查询字符串拆分成有意义的词汇的角色,这些词汇随后会被用于在索引中进行匹配。 最后,Solr是Apache Lucene的一个分支,是一个高度可定制的、高...

    lucene简单介绍及solr搭建使用

    标题“lucene简单介绍及solr搭建使用”涉及了两个主要的开源搜索技术:Lucene和Solr。Lucene是Java开发的一个全文检索库,而Solr则是基于Lucene构建的企业级搜索平台,提供了更高级的功能和管理界面。 **Lucene简介...

    lucene&solr原理分析

    lucene&solr原理分析,lucene搜索引擎和solr搜索服务器原理分析。

    solr_lucene3.5_lukeall-3.5.0.jar.zip

    标题中的"solr_lucene3.5_lukeall-3.5.0.jar.zip" 提供了关于这个压缩包的基本信息。它包含了Solr和Lucene的特定版本——3.5.0,以及一个名为"lukeall"的工具。"Luke"在Lucene和Solr的上下文中是一个非常有用的工具...

    搜索引擎 Lucene、Solr

    5. Solr是一个基于Lucene构建的企业级搜索服务器,它提供了搜索引擎的索引、搜索、排序等功能,并通过RESTful API与各种客户端进行交互。Solr在实现搜索引擎方面,不仅继承了Lucene的强大功能,还提供了分布式搜索、...

    solr5.4.0完整包

    Solr 依存于Lucene,因为Solr底层的核心技术是使用Lucene 来实现的,Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。Lucene本质上是搜索库,不是独立的应用程序,而Solr是。Lucene专注于搜索底层的...

    solr_solr_lucene_

    Solr是一个高性能,采用Java开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一...

    solr实现电商自定义打分

    Solr的默认评分是基于TF-IDF(词频-逆文档频率)算法的,它会根据查询词在文档中的出现频率和在整个索引中的普遍程度来计算相关性。然而,这种默认设置可能并不完全符合电商场景的需求,例如,我们可能希望销量高、...

    lucene solr

    lucene solr 全文搜索框架,该教程有助于深入了解lucene solr的用法以及他么们之间的比较

    solr6.0中文分词

    IKAnalyzer 是一个广泛使用的开源中文分词器,它特别设计用于支持 Solr 和 Lucene(Solr 的底层搜索引擎库)等项目。IKAnalyzer 提供了强大的分词能力,能够处理复杂的中文语法和词汇,包括多音字、成语和新词发现。...

    IK分词器-Lucene与Solr学习中使用

    在Lucene和Solr中,IK分词器扮演着核心角色,帮助提升搜索精度和效率。 首先,让我们深入了解一下Lucene。Lucene是一个开源的全文检索库,由Apache软件基金会开发。它提供了强大的信息检索功能,包括文本分析、索引...

    hanlp-lucene-plugin, HanLP中文分词Lucene插件,支持包括Solr在内的基于Lucene的系统.zip

    汉纳拼音Lucene插件(hanlp-lucene-plugin)是一个专为中文处理设计的扩展工具,它将著名的HanLP中文分词库与流行的全文检索框架Lucene进行了集成,旨在提升在Lucene及其衍生产品(如Solr)中的中文处理能力。...

    lucene、solr中文分词器

    本篇文章将深入探讨Lucene和Solr中的中文分词器及其重要性。 首先,Lucene是一个高性能、全文检索的Java库,它提供了基础的索引和搜索功能。然而,Lucene最初的分词器设计主要面向英文,对于中文的处理并不理想,...

    lucene solr框架代码实例(可直接运行)

    Java领域中,Lucene和Solr是两款强大的全文搜索引擎库,为开发者提供了高效的文本搜索解决方案。本文将围绕“lucene solr框架代码实例(可直接运行)”这一主题,深入探讨Lucene和Solr的核心特性,以及如何通过它们...

    lucene-solr源码,编译成的idea项目源码

    本人用ant idea命令花了214分钟,35秒编译的lucene-solr源码,可以用idea打开,把项目放在D:\space\study\java\lucene-solr路径下,再用idea打开就行了

Global site tag (gtag.js) - Google Analytics