当前位置: 首页 > 面试题库 >

Lucene:如何对几个独立的索引集执行搜索并将结果合并?

燕琛
2023-03-14
问题内容

现在,我有几个Lucene索引集(我称为分片),它们为不同的文档集建立索引。它们是独立的,这意味着我可以对它们中的每一个执行搜索,而无需阅读其他文件。然后我得到一个查询请求。我想在每个索引集上搜索它,并将结果组合起来以形成最终的顶级文档。

我知道在对文档评分时,Lucene需要知道每个术语的< idf >,并且不同的索引集将为同一术语赋予不同的< idf

(因为不同的索引集持有不同的文档集)。因此,据我了解,我无法直接比较不同索引集的文档分数。那我应该如何产生最终结果呢?

一个显而易见的解决方案是,首先合并索引,然后对大索引执行搜索。但是,这对我来说太耗时,因此是无法接受的。有人还有其他更好的解决方案吗?

PS:除了Lucene和Hadoop,我不想使用任何软件包或软件(例如Katta)。


问题答案:

我认为MultiReader是您想要的。如果您有多个IndexReader,请说reader1reader2

MultiReader multiReader = new MultiReader(reader1, reader2);
IndexSearcher searcher = new IndexSearcher(multiReader);


 类似资料:
  • 现在我有了几个Lucene索引集(我称之为shards),它对不同的文档集进行索引。它们是独立的,这意味着我可以在它们中的每一个上执行搜索,而不必阅读其他的。然后我得到一个查询请求。我想在每个索引集上搜索它,并结合结果形成最终的顶级文档。 我知道,在给文档打分时,Lucene需要知道每个术语的 ,不同的索引集会给同一个术语不同的 (因为不同的索引集持有不同的文档集)。因此,根据我的理解,我不能直接

  • bugu-mongo 2.x版本集成了Lucene的功能。当往MongoDB中新增一个Document时,能自动为该Document建立Lucene索引。相应的,当MongoDB中的Document被修改、删除时,对应的Lucene索引也会修改、删除。 另外,bugu-mongo还提供了对Lucene搜索的支持。根据Lucene索引进行搜索的时候,搜索结果能自动转换成对应的Entity对象。 在L

  • 问题内容: 自几个月前以来,我的集群每天都有一个索引,每个索引有5个分片(默认),并且由于分片太多(超过1000个),我无法在整个集群上运行查询。 文档ID是自动生成的。 如何将索引合并为一个索引,处理有冲突的ID(甚至可能发生冲突)并更改类型? 我正在使用ES版本5.2.1 问题答案: 仅在使用ELK堆栈几个月并逐日创建索引后才可见的常见问题。这里有一些选项可以解决性能问题。 首先,您可以用来限

  • 在测试此文本时,我在要在文本中搜索的列上创建了lucene(3.0.1)索引: 如果我按关键字搜索,它会给出结果,但按 我正在使用standardAnalyzer: 因为已设置,它应创建令牌,并且应存在$GLD。Analyzer将从文本中删除停止字,因为word也将在该过程中删除。

  • 当跨多个索引进行搜索时,elasticsearch的“多重匹配”查询将返回搜索结果中的索引名称。 响应包含字段,该字段告诉结果来自的索引 spring-data-elasticsearch中用于的类是和具有字段、、用于获取与elasticsearch查询相似的数据。但它不包含用于存储字段信息的相关字段。 还支持吗?我需要根据哪个客户端应用程序将生成一些URL发送搜索命中类型(name)。 这是我使

  • 我在我的应用程序中使用Hibernate搜索。其中一个子集合映射为IndexeDemBedded。子对象有两个字段,一个是id,另一个是date(使用date resoultion到毫秒)。当我搜索ID=1(或某个值)并且date等于另一个值时,我会得到第一个和第二个匹配的所有情况的结果。我只想在同一个孩子中获得两个字段匹配的记录,但我在不同的孩子中获得匹配,结果会高得多。下面是代码片段 主类是用