编程语言
首页 > 编程语言> > c# – 在1700万个文档Lucene.NET索引中查询/排序前1000个文档时性能下降

c# – 在1700万个文档Lucene.NET索引中查询/排序前1000个文档时性能下降

作者:互联网

我想在Lucene.NET索引中找到前1000个文档,它们匹配按视图计数排序的类型和标记.我的索引包含1700万份文件.我正在搜索“实体”类型并标记“商家”.现在索引中的几乎每个文档都有一种“实体”和一个“商业”标签.两者都是索引但未分析且没有术语向量的字符串字段.现在,从此查询中获取结果大约需要15-20秒.

这是我的代码:

string subType = "entity";
string tag = "business";
BooleanQuery filterQuery = new BooleanQuery();
filterQuery.Add(new BooleanClause(new TermQuery(new Term("SubType", subType)), BooleanClause.Occur.MUST));
filterQuery.Add(new BooleanClause(new TermQuery(new Term("Tag", tag)), BooleanClause.Occur.MUST));
Sort sort = new Sort(new SortField("Views", global::Lucene.Net.Search.SortField.INT, true));
Filter queryFilter = new QueryWrapperFilter(filterQuery);
TopDocs docs = searcher.Search(new MatchAllDocsQuery(), queryFilter, 1000, sort);

任何有关改善性能的建议都非常感谢.我花了大约8个小时调整和弄乱东西.现在我将结果缓存15分钟,以便将来的搜索只能返回缓存的结果,但初始搜索只是非常缓慢.

假设Lucene进行任何类型的游程编码,似乎“实体”和“业务”术语的集合应该压缩到几个字节…

解决方法:

现实检查:根据您的规格,您订购16830000(16,83百万)个文件,以获得前1000名.

这意味着必须加载它们才能进行分类.

是.这将是缓慢的.

削减数字.任何返回超过10,000件商品的东西都值得分类.

标签:c,lucene-net
来源: https://codeday.me/bug/20190530/1185725.html