我们用露西做了一些测试。Net 3.0.3在搜索和插入方面。
在测试中,我们使用了基于真实英语单词的关键词分析器和文本生成器。
当索引点击大约800万个文档,同时搜索1000个随机句子时,搜索需要25分钟才能完成。(默认排序)
如果我们将搜索更改为文档排序:
searcher.Search(query, null, int.MaxValue, new Sort(new SortField(null, SortField.DOC, true))); // boolean query
搜索只需几秒钟即可完成。
有什么好处?默认排序是否基于相关性?为什么会产生如此巨大的影响?
此外,如果我们从int减少命中视频数。MaxValue让我们假设50,它也将搜索减少到几秒钟。
只取索引中找到的前50个点击,而忽略其余的?
我相信你的猜测是对的,如果你按文档id顺序排序,它不需要对每个匹配的文档进行评分,而是在找到足够匹配的文档后会短路,而不是对每个文档进行评分排序,以便知道哪些文档是最佳匹配的。
不过,似乎你应该问的问题是,为什么搜索要花这么长时间?
根据你所写的,我想我可以猜测:你不应该使用KeywordAnalyzer全文。听起来像是将全文作为关键字索引,然后搜索句子,可能使用双通配符或正则表达式,或者类似的东西。别再那样做了。你不妨忘记Lucene,编写一个老式的顺序搜索代码,因为这就是你强迫Lucene做的事情。使用真正满足您搜索需求的分析器(Standard ardAnalyzer
或English ishAnalyzer
是很好的起点),并使用短语查询来搜索短语或句子。
我知道这里提到的弹性搜索和Lucene的区别。 Lucene和Elasticsearch有什么不同 弹性搜索除了可扩展性、容错性和分布性之外,两者的核心区别是什么。 弹性搜索提供了比Lucene更好的搜索功能吗?
bugu-mongo 2.x版本集成了Lucene的功能。当往MongoDB中新增一个Document时,能自动为该Document建立Lucene索引。相应的,当MongoDB中的Document被修改、删除时,对应的Lucene索引也会修改、删除。 另外,bugu-mongo还提供了对Lucene搜索的支持。根据Lucene索引进行搜索的时候,搜索结果能自动转换成对应的Entity对象。 在L
我的任务是使用lucene在我们的产品表中搜索。我已经创建了一个索引,正在使用带有多个字段的QueryParser进行搜索,但结果不是我所需要的。我有一个存储为LM10的产品,但如果搜索词是LM 10,我希望能够找到它,但如果搜索词是Fred LM10或Fred LM 10,它也必须能够匹配。你知道我如何在Lucene做到这一点吗。 提前谢谢
问题内容: 我们有两个节点的集群(私有云中的VM,64GB的RAM,每个节点8个核心CPU,CentOS),几个小索引(约100万个文档)和一个大索引,约有2.2亿个文档(2个分片,170GB)的空间)。每个盒上分配了24GB的内存用于elasticsearch。 文件结构: 运行以下查询大约需要1-2秒: 我们是在此时达到硬件极限,还是有办法优化查询或数据结构以提高性能? 提前致谢! 问题答案:
在测试此文本时,我在要在文本中搜索的列上创建了lucene(3.0.1)索引: 如果我按关键字搜索,它会给出结果,但按 我正在使用standardAnalyzer: 因为已设置,它应创建令牌,并且应存在$GLD。Analyzer将从文本中删除停止字,因为word也将在该过程中删除。
假设我有三个指数:城市、博物馆和景点。 现在我正在查询一个术语的所有索引(),例如“维也纳” 作为结果,我得到: 维也纳:维也纳艺术博物馆 有没有办法优先考虑指数,这样我就可以得到第一个城市,而不是景点,最后是博物馆,就像这样: 维也纳 维也纳的Riesenrad 维也纳:维也纳艺术博物馆 维也纳:维也纳历史博物馆