Lucene搜索范围

2019-03-27 01:03|来源: 网路

在搜索程序较为棘手一部分就是搜索范围。

绝大数搜索程序都不能在单台计算机上完成足够数量的数据搜索或并发搜索。

有时候为了避免由于单硬件问题出现导致无法服务,可以运行在多台机器上。

这种设计能够不影响当前搜索程序运行的情况下临时推出一台计算机来进行维护和升级。

搜索范围有两种界定方式: 净处理内容和净查询吞吐量。

   如果处理的数据量较大的话必须将这些数据分割成各个小部分,以便让多台分离的计算机分别搜索对应的部分。

   前端服务器会将新来的查询请求发送至所有部分,然后将各个部分的搜索结果合并成总的搜索结果集。

   如果你想在程序使用的高峰期获得较高的搜索吞吐量,那么你必须将同一索引复制到前述多个计算机上,前端加载平衡器会将新来的查询请求发送给加载最少的后台计算机中。

   如果你需要同时使用以上两种界定方式,正如web搜索引擎做的那样,那么可以将以上实践合并起来。

 基于Lucene的开源项目Solr 可以实现多台机子直间 索引的复制 和 多核,这为我们省去不少事,你也可以建立自己的解决方案。

 Nutch 也可以,不过我没有接触过,以后慢慢了解


转自:http://www.cnblogs.com/tomcattd/archive/2013/02/01/2889358

相关问答

更多
  • lucene怎么用[2022-07-03]

    Lucene是一个全文检索系统框架,开源的。 用起来比较方便,去Lucene的官网上下一个包并导入到你的工程中就可以调用包里面的类了。 一般的书里面介绍的版本都是1.4.3或者稍微高级一点的,不过现在lucene3.0正式发布,一些函数调用方法已经改变了,你可以下载一个版本低一点的Lucene比较适合学习~ 当然你直接从3.0入手的话网上资料也是非常丰富的~
  • SpanQuery是按照词在文章中的距离或者查询几个相邻词的查询。 打个比方:如“中华人民共和国” 用“中国“做为关键字, 跨度为某个值,如5。跨度代表 中 和国之间的长度。。 lucene的: SpanQuery包括以下几种: SpanTermQuery:词距查询的基础,结果和TermQuery相似,只不过是增加了查询结果中单词的距离信息。 SpanFirstQuery:在指定距离可以找到第一个单词的查询。 SpanNearQuery:查询的几个语句之间保持者一定的距离。 SpanOrQuery:同时查询 ...
  • 如何用java实现lucene(只使用,不求甚解版-_-") 1.前提   lucene有7个包需要导入:analysis,document,index,queryParser,search,store,util    2.建立索引   IndexWriter writer = new IndexWriter("E:/index", new StandardAnalyze(),true,MaxFieldLength.UNLIMITED); //true代表覆盖原先数据,maxFieldLength用来限制F ...
  • 可以使用PhraseQuery ,如: PhraseQuery query = new PhraseQuery(); query.setSlop(0); query.add(new Term("contents",“故障”)); //contents为索引搜索字段名 query.add(new Term("contents",“原”)); query.add(new Term("contents",“因”)); TopDocs topDocs = searcher.search(query, 10);
  • lucene搜索问题[2022-12-26]

    创建索引时,因为是TextField,所以会进行分词,IKAnalyzer把Yello你好会分成Yello和你好,所以你第一个termQuery搜索不到信息。改成new Term("content", "你好") 或new Term("content", "yello")就能搜索到了 StringField是不分词的
  • misc Lucene包中的NRTManager提供了同时搜索和索引的功能。 TrackingIndexWriter writer; // your writer SearcherFactory factory = new SearcherFactory(); NRTManager mgr = new NRTManager(writer, factory); 检查NRTManager方法以获取更多信息。 NRTManager in the misc Lucene package provides the ...
  • 您可以使用WildCardQuery ,因为单词expense包含在所有四个文档中,因此您可以将搜索字符串作为*expense*传递,这将返回name字段中具有费用的所有文档。 不要忘记设置QueryParser以允许带有以下内容的前导通配符: QueryParser.setAllowLeadingWildcard(true) 在代码中进行以下更改: nameQParser.setAllowLeadingWildcard(true); Query query = nameQParser.parse("*e ...
  • 在更新安装期间,系统管理员已在服务器配置中指定了Lucene索引的相对路径 ,然后启动应用服务器。 首次启动后,我们的应用程序在数据库中对数据进行完全索引,然后每两小时增加一次索引。 我们的服务器每晚都通过chron任务重启,因此在自动重启后, Lucene索引的相对路径会发生变化 。 下一个增量索引在不同文件夹中创建新索引文件并保存更改。 当我向系统管理员询问索引文件时,他们给我第一个创建的大索引,我将对它们进行分析,但实际上,服务器使用不同的索引文件。 所以,答案是:需要指定Lucene索引文件夹的完整 ...
  • 你说的是正确的。 从索引中检索文档时,请尝试使用SetBasedFieldSelector 。 正如另一张海报所指出的,迭代命中将返回ScoreDoc对象。 这将为您提供可用于使用与IndexSearcher关联的IndexReader检索文档的文档ID。 如果因为加载你不感兴趣的字段而导致IO出现问题,那么你应该感到惊喜。 希望这可以帮助, You're on the right lines. Try using a SetBasedFieldSelector when you retrieve the ...
  • 分析器旨在将字符串拆分为标记。 SmartChineseAnalyzer将“和试天下”分为“和”,“试”和“天下”,就像StandardAnalyzer将“谁获得世界”分为“谁”,“获取”和“世界”一样。 如果你想搜索一个短语,你的查询应该引用: qp.parse("\"且试天下\""); 如果您不希望分析该字段,请将其索引为StringField (或使用KeywordAnalyzer )。 Analyzers are intended to split strings into tokens. The ...