`
wbj0110
  • 浏览: 1611598 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

solr4.0扩展payload搜索

    博客分类:
  • Solr
阅读更多

1.重写自己的Similarity 或者修改org.apache.lucene.search.similarities.DefaultSimilarity,重写 scorePayload方法,这样生成索引时payload分数才会生效了,否则永远是1(默认值),如果重写自己的similarity,需要在 org.apache.solr.schema.IndexSchema中当node==null时修改设置自己的similarity

Node node = (Node) xpath.evaluate("/schema/similarity", document, XPathConstants.NODE);
    if (node==null) {
      similarityFactory = new SimilarityFactory() {
        @Override
        public Similarity getSimilarity() {
          return Similarity.getDefault();
        }
      };
      log.debug("using default similarity");
    } else {
      final Object obj = loader.newInstance(((Element) node).getAttribute("class"));
      if (obj instanceof SimilarityFactory) {
        // configure a factory, get a similarity back
        SolrParams params = SolrParams.toSolrParams(DOMUtil.childNodesToNamedList(node));
        similarityFactory = (SimilarityFactory)obj;
        similarityFactory.init(params);
      } else {
        // just like always, assume it's a Similarlity and get a ClassCastException - reasonable error handling
        similarityFactory = new SimilarityFactory() {
          @Override
          public Similarity getSimilarity() {
            return (Similarity) obj;
          }
        };
      }
      if (similarityFactory instanceof SchemaAware){
        schemaAware.add((SchemaAware) similarityFactory);
      }
      log.debug("using similarity factory" + similarityFactory.getClass().getName());
    }

 

或者在schema中设置自己的similarity

<similarity class="com.example.solr.CustomSimilarityFactory"> </similarity>

 @Override
  public float scorePayload(int doc, int start, int end, BytesRef payload) {
    return PayloadHelper.decodeFloat(payload.bytes,payload.offset);
  }

2.扩展payload的搜索插件。

 

package org.suishi.solr;


import org.apache.lucene.index.Term;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.payloads.AveragePayloadFunction;
import org.apache.lucene.search.payloads.MaxPayloadFunction;
import org.apache.lucene.search.payloads.MinPayloadFunction;
import org.apache.lucene.search.payloads.PayloadFunction;
import org.apache.lucene.search.payloads.PayloadTermQuery;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.search.QParser;
import org.apache.solr.search.QParserPlugin;
import org.apache.solr.search.QueryParsing;


public class PayloadTermQueryPlugin extends QParserPlugin {
@Override
public void init(NamedList args) {
}
@Override
public QParser createParser(String qstr, SolrParams localParams,
SolrParams params, SolrQueryRequest req) {
return new QParser(qstr, localParams, params, req) {
public Query parse() throws ParseException {
return new PayloadTermQuery(new Term(
localParams.get(QueryParsing.F),
localParams.get(QueryParsing.V)),
createPayloadFunction(localParams.get("func")), false);
}
};
}
private PayloadFunction createPayloadFunction(String func) {
// TODO: refactor so that payload functions are registered as plugins
// and loaded
// through SolrResourceLoader.


PayloadFunction payloadFunction = null;
if ("min".equals(func)) {
payloadFunction = new MinPayloadFunction();
} else if ("avg".equals(func)) {
payloadFunction = new AveragePayloadFunction();
} else if ("max".equals(func)) {
payloadFunction = new MaxPayloadFunction();
}
if (payloadFunction == null) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
"unknown PayloadFunction: " + func);
}
return payloadFunction;
}
}

3. 在solrconfig配置文件中添加2中的插件。

 

<queryParsername="payload"class="org.suishi.solr.PayloadTermQueryPlugin"/>

4.payload特用的查询语句。

 

http://localhost:8983/solr/select?q={!payload%20f=payloadfield%20func=avg}searchvalue&debugQuery=true

http://blog.csdn.net/july_2/article/details/7951188

 

 

大家可以加我个人微信号:scccdgf

 

 

或者关注soledede的微信公众号:soledede
微信公众号:
分享到:
评论

相关推荐

    Solr 4.0 源代码实例

    Solr 4.0 是Apache Lucene项目的一个子项目,是一个高性能、全文本搜索服务器,为企业级数据提供强大的搜索功能。源代码实例是学习Solr内部工作原理和自定义功能的关键资源,尤其对于开发者而言,深入理解源码有助于...

    php与solr交互扩展库包

    标题中的“php与solr交互扩展库包”指的是PHP与Apache Solr搜索引擎之间的一个扩展库,这个库使得在PHP环境中可以方便地与Solr服务进行数据的增删查改操作。Solr是一款强大的、高性能的全文检索服务器,常用于大型...

    搜索引擎solr的扩展词库

    电商搜索引擎solr的扩展词库,20W+的专业名词,txt文件;

    solr软件包扩展词典可停词配置学习和开发文档

    总之,掌握Solr的Linux安装、扩展词典配置和停词管理是提升搜索质量的基础。通过深入学习Solr的文档和实践经验,开发者可以进一步优化搜索性能,满足复杂的企业级搜索需求。在实际项目中,结合具体业务场景,灵活...

    Solr Redis 扩展.zip

    Solr Redis 扩展Solr Redis 扩展此扩展是一个 ParserPlugin,它根据存储在 Redis 中的数据提供 Solr 查询解析器。RedisQParserPlugin 与 Redis 创建连接并将连接对象传递给负责获取数据和构建查询的 RedisQParser。...

    电商solr用扩展词库商品名称大全关键词库ext.dic

    可做为电商搜索引擎solr的扩展词库,20W+专业名词,txt文件可修改后缀名,不定时更新。

    Solr扩展依赖Jar包

    Solr扩展依赖Jar包是Apache Solr项目中的一个重要组成部分,它是Solr运行和功能扩展的基础。Solr是一款基于Lucene的开源全文检索服务器,广泛应用于大数据环境下的全文检索、数据分析和云计算服务。为了实现更复杂、...

    solr扩展词库

    solr扩展词库,共100多万条,供大家下载使用,内容很全

    apache-solr-4.0.0-ALPHA-src.gz官方包

    6. **分布式搜索**:SolrCloud是Solr的分布式搜索和处理模式,4.0版本可能已开始支持。源码可以帮助理解ZooKeeper协调下的集群管理和分布式搜索策略。 7. **插件机制**:Solr支持丰富的插件系统,允许用户自定义...

    php 扩展 -- solr-1.0.1

    PHP扩展Solr是PHP与Apache Solr搜索引擎之间的桥梁,它允许PHP应用程序无缝地与Solr服务器进行交互,执行搜索、索引操作等。在Linux环境下安装这个扩展,需要遵循一系列步骤,确保所有依赖项都已满足,并正确编译和...

    solr7官方文档

    - "Solr 云" 描述了如何在 AWS EC2 等云平台上部署和运行 SolrCloud,这是构建可扩展搜索解决方案的关键技术。 - "升级 Solr 集群" 提供了升级 Solr 集群时的注意事项和步骤,确保在升级过程中数据安全和系统稳定性...

    alfresco4.0部署及分离solr

    分离部署Solr的好处在于提高了系统的可扩展性和稳定性,特别是在处理大量数据和高并发搜索请求时。同时,这样可以使得Alfresco与Solr的升级和维护更加独立,降低了整体系统的复杂性。 在实际生产环境中,可能还需要...

    ik分词包 用于lucene4.2和solr4.2的最新包

    自从lucene和solr推出4.0版本后 ik分词的调用接口已经不适用了,虽说ik最新ff版适用于solr4.0 但是solr4.2出来之后发现又不适用了,本人花了一点功夫熟悉solr4.2的分词调用接口补写了一个IkTokenizerFactory类 经...

    solr-4.10.3.zip

    Solr是中国Apache软件基金会开发的一款开源全文搜索引擎,它基于Java平台,可以实现高效、可扩展的搜索和导航功能。在企业级应用中,Solr常用于构建大规模的、高性能的搜索解决方案。标题中的"solr-4.10.3.zip"表明...

    solr6.6.2的完整的包

    Solr是Apache软件基金会开发的一款开源全文搜索引擎,它基于Java平台,可以实现高效、可扩展的搜索和导航功能。在本案例中,我们讨论的是Solr的6.6.2版本,这是一个完整的包,适用于在Linux环境中进行部署和运行。 ...

    solr(solr-9.0.0.tgz)

    Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,主要用来处理全文搜索和企业级的搜索应用。它基于Java,利用Lucene库构建,提供了高效、可扩展的搜索和导航功能。Solr-9.0.0是该软件的最新版本,此...

    solr-redis:Solr Redis扩展

    Solr Redis扩展该扩展是一个ParserPlugin,它基于Redis中存储的数据提供Solr查询解析器。 RedisQParserPlugin创建与Redis的连接,并将连接对象传递给负责获取数据和构建查询的RedisQParser。快速开始使用Maven进行...

    Solr参考书籍

    这本书是针对Solr 4.0版本的一本实战指南,由Pete Muir和Tommaso Teofili合著。书中包含了大量解决常见问题和实现特定功能的实例,旨在帮助读者快速上手并掌握Solr的核心操作。内容涵盖设置和配置Solr服务器、索引...

    mmseg4j-all-1.9.0.v20120712-SNAPSHOT.jar (非Bug版)

    mmseg4j是一个很出色的中文分词器,当前最新版本为1.9,官方的版本和solr4.0组合使用时因为solr4.0接口的变化导致无法正常运行,所以需要对mmseg4j中的部分代码进行修改,该版本是本人修改后的版本,测试后可以正常...

Global site tag (gtag.js) - Google Analytics