`
liuxinglanyue
  • 浏览: 565430 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Solr1.4.0源码分析二 Solr分布式搜索中URL的正确用法和原理(转)

    博客分类:
  • Solr
阅读更多

http://guoyunsky.iteye.com/blog/761308

 

 

     最近要使用Solr做分布式搜索,自己一开始也是从网上搜集一些资料照着做.其中发现对Solr分布式搜索有个误区,会导致搜索结果不正确.比如我这里有两个Shand:
  1)http://localhost:8080/solr1.4/core0/
  2)http://localhost:8080/solr1.4/core1/
  
     我要从中找出查询为110排名为前30的数据,于是我用以下URL:
     1.

http://localhost:8080/solr1.4/core0/select?q=110&shards=localhost:8080/solr1.4/core0,localhost:8080/solr1.4/core1&shards.rows=30
       但发现界面上返回的结果只有10条.这里我已经设置了shards.row=30,但为什么会只返回10条呢?于是自己再加了个start参数,URL如下:
      2. 
http://localhost:8080/solr1.4/core0/select?q=110&shards=localhost:8080/solr1.4/core0,localhost:8080/solr1.4/core1&shards.rows=30&shards.start=30
  发现结果变化了,但条数还是10条.后来跟踪了下源码,才找到原因,URL应该设置成: 

     3.http://localhost:8080/solr1.4/core0/select?q=110&shards=localhost:8080/solr1.4/core0,localhost:8080/solr1.4/core1&shards.rows=60&start=30&rows=30
     其中从排名第30名开始,获得30条结果,也就是获得排名30到60的结果,应该将start和rows设置为start=30&rows=30,而不是shards.start=30&shards.row=30,而Shard里应该设置为shards.start=0&shards.rows=60(shards.start=0可以省略,Solr默认会从0开始),其shards.rows=start+rows.
  

     以上是设置方法,用于分布式搜索获得排名30-60的数据.这里大概讲下原理:
  
     Solr会构造ShardFieldSortedHitQueue去收集从各个Shard查询的结果,该类继承Lucene的PriorityQueue(我模拟了这个类的方法,可以参考我这篇博客:
  
http://guoyunsky.iteye.com/blog/723963),需要指定排序Field(SortField)和大小.而指定SolrField和大小,Solr里面有个自己的类SortSpec去管理,Solr在查询组件QueryComponent初始化的时候会通过start和rows参数来构造SortSpec.而如果URL里没有这两个参数,则Solr会采用默认的,也就是start=0&rows=10,如此导致我一开始查询结果始终只有10条.
     还有个更严重的问题,如果我需要从多个Shard中获得排名30-60的数据,那么我们肯定要获得每个Shard中排名前60的数据,然后合并各个Shard,找到所有Shard排名前60的数据.然后再从结果后面取30条,也就是排名30-60的数据了.所以如果像我一开始那样指定Shards.row=30,那么获得的是每个Shard排名前30的数据而非60.所以在我第二条URL中加上
  Shards.start=30所获取的结果跟第一条不一样,因为它是让每个Shard取的排名前60的数据.
  
     但发现Solr里面还是有些没注意的地方,比如solrconfig.xml中可以设置<queryResultWindowSize>20</queryResultWindowSize>表示显示结果条数.所以Solr应该采用这个默认值
  而不是它自己定义的10,同时也包括Solr Web管理界面,里面的rows都是设置的10.

分享到:
评论

相关推荐

    apache-solr-1.4.0.zip_apache-solr _apache-solr-1.4.0_apache-solr

    3. **分布式搜索**:SolrCloud是Solr的分布式搜索和索引分片功能,但在1.4.0版本中,Solr尚未集成这一特性。不过,可以通过设置多个独立的Solr实例实现基本的分布式部署。 4. **实时索引**:Solr支持实时索引,即新...

    solr-6.2.0源码

    在Solr 6.2.0版本中,这个强大的分布式搜索引擎引入了许多新特性和改进,使其在处理大规模数据搜索时更加高效。 一、Solr的架构与工作原理 Solr的核心架构包括客户端API、Solr服务器和索引库。客户端通过HTTP或...

    Solr集群搭建,Solr提供的分布式搜索方案

    ### Solr集群搭建与SolrCloud分布式搜索方案详解 #### 一、SolrCloud概述 SolrCloud 是 Apache Solr 提供的一种分布式搜索解决方案。它主要用于处理大规模数据集的索引和检索工作,并具备容错性和分布式特性。当...

    solr 分布式参考

    总之,Solr的分布式特性使得它成为大数据时代下企业级搜索应用的理想选择,能够有效应对大规模数据的处理和高并发的挑战。在实际应用中,根据具体业务场景进行适当的配置和优化,可以充分发挥Solr的潜力,构建高效、...

    solr6.6.0源码

    在Solr 6.6.0中,SolrCloud提供了分布式搜索和管理能力。它依赖于ZooKeeper进行集群管理和数据分配。ZooKeeper负责节点的注册、状态监控、分片分配和领导者选举等任务。 五、优化与性能 1. **缓存机制**:Solr包含...

    Solr项目源码及solr资源包

    Solr项目源码及solr资源包是一个针对搜索...通过深入研究和实践这个“Solr项目源码及solr资源包”,开发者不仅可以掌握Solr的基本用法,还能了解Spring Data Solr的高级特性,从而提升在实际项目中的搜索引擎开发能力。

    solr(solr-9.0.0-src.tgz)源码

    源码分析是深入理解一个软件系统工作原理的重要途径,对于Solr这样的复杂系统尤其如此。这里我们将围绕"solr-9.0.0-src.tgz"这个源码包,详细探讨其主要组成部分、核心功能以及开发过程中的关键知识点。 1. **Solr...

    solr 4.10源码

    这个源码包包含了Solr 4.10.4的所有源代码,对于开发者来说,这是一个深入了解Solr工作原理、定制功能以及进行二次开发的重要资源。 1. **Solr简介** Apache Solr是一个基于Lucene的全文检索服务,提供了一个高效...

    solr 分布式部署

    Solr的分布式部署是大型搜索应用的关键,它能够提高系统的可扩展性和性能。在本文中,我们将深入探讨如何实现Solr的分布式部署,包括需求、步骤、配置以及执行分发脚本。 首先,理解分布式部署的需求是至关重要的。...

    Solr-search过程源码分析

    在深入探讨Solr-search过程的源码分析时,我们聚焦于关键步骤与核心组件,以求全面理解Solr搜索机制的内部运作。Solr作为一款高性能、可伸缩的开源搜索平台,其搜索处理流程涉及多个层次的组件交互与数据处理,其中...

    apache-solr-dataimporthandler-extras-1.4.0.jar.zip

    总结来说,`apache-solr-dataimporthandler-extras-1.4.0.jar`是一个增强Solr DataImportHandler功能的库,它可以帮助用户更方便地从各种数据源导入和更新数据,提高了Solr作为企业级搜索和分析平台的灵活性和实用性...

    lucene&solr原理分析

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

    apache-solr-core-1.4.0.jar

    apache-solr-core-1.4.0.jar,apache-solr-core-1.4.0.jar

    solr-4.5源码包

    在这个源码包中,我们可以深入理解Solr的工作原理以及其核心组件的实现。 首先,让我们了解Solr的基本架构。Solr基于Lucene库构建,Lucene是一个高性能、全文本检索库。Solr在其之上添加了分布式处理、集群管理、...

    Solr 学习笔记(五)-Solr扩展之分布式索引实例

    在本篇Solr学习笔记中,我们将探讨Solr的分布式索引功能,这对于处理大量数据和实现高可用性至关重要。Solr的分布式索引能力允许我们跨越多个节点分布和处理索引过程,从而提高索引速度和查询性能。在实际应用中,这...

    solr(中文分词器)集群

    Solr(Apache Solr)是基于Java开发的一款全文搜索引擎服务器,它提供了强大的索引和搜索功能,同时也支持...通过深入理解这些组件的工作原理和配置方法,开发者可以构建出强大的搜索系统,满足各种复杂的业务需求。

    高性能分布式搜索引擎Solr的研究与实现.pdf

    通过介绍Solr的特性和基于Solr的分布式搜索架构,文章为大数据时代下如何提升搜索引擎性能提供了新的思路和方法。文章的研究成果对于搜索引擎设计、大数据处理以及云计算领域具有重要的理论和实践意义。

    ES和solr搜索方案对比

    ES(ElasticSearch)和Solr都是基于Lucene的搜索引擎,它们各自提供了一套搜索框架,用于实现高效的全文搜索功能。由于两者都是在Apache License 2下开源的,因此在选择使用哪种搜索方案时,需要根据不同的使用场景...

    一键安装伪分布式zk集群-solr集群脚本

    标题中的“一键安装伪分布式zk集群-solr集群脚本”指的是使用自动化脚本来部署Zookeeper集群和Solr集群,这种部署方式简化了传统手动安装的复杂过程,适合初学者和快速测试环境。Zookeeper是一个分布式协调服务,而...

Global site tag (gtag.js) - Google Analytics