[英]Lucene.Net fuzzy search speed
对此表示抱歉,但我希望得到经验丰富的Lucene的帮助。
现在,我们在应用程序Lucene.Net 3.0.3中使用〜2.500.000项进行索引和搜索。 每个实体包含27个可搜索字段,并以这种方式添加到索引中:new Field(key,value,Field.Store.YES,Field.Index.ANALYZED))
现在我们有两个搜索选项:
我们有一个搜索服务,每周可以自动搜索大约53000人,例如“鲍勃·休斯顿”,“萨拉·科纳尔”,“苏珊·洪·维恩霍”等。
因此,在选项1中 ,我们遇到缓慢的搜索速度,这s an average 4-8 sec in searcher.Search and it
是我们的主要问题。
搜索示例代码:
var index = FSDirectory.Open(indexPath);
var searcher = new IndexSearcher(index, true);
this.analyzer = new StandardAnalyzer(Version.LUCENE_30, new HashSet<string>())
var queryParser = new MultiFieldQueryParser(Version.LUCENE_30, queryFields, this.analyzer);
queryParser.AllowLeadingWildcard = false;
Query query;
query = queryParser.Parse(token);
var results = searcher.Search(query, NumberOfResults);// NumberOfResults==500
我们的模糊搜索查询在4个字段中找到“ bob cong hong”:
((((PersonFirstName:bob〜0.6)OR(PersonLastName:bob〜0.6)OR(PersonAliases:bob〜0.6)OR(PersonAlternativeSpellings:bob〜0.6))AND(((PersonFirstName:cong〜0.6)OR((PersonLastName:cong〜0.6) )或(PersonAliases:cong〜0.6)OR(PersonAlternativeSpellings:cong〜0.6)AND((PersonFirstName:hong〜0.6)OR(PersonLastName:hong〜0.6)OR(PersonAliases:hong〜0.6)OR(PersonAlternativeSpellings:hong〜0.6) )))
当前改进:
改进的总和使速度提高了约30-40% 。
在本文之后,我们进行了大多数可能的优化:
您还有其他建议在我们这种情况下如何提高搜索速度吗?
谢谢。
您可以通过将模糊查询的前缀长度设置为非零值来提高其速度。 这将使lucene有效地缩小可能结果的范围。 像这样:
queryParser.FuzzyPrefixLength = 2;
另外,它不会影响您作为示例提供的查询,但是如果您完全关心性能,则应删除queryParser.AllowLeadingWildcard = false;
行queryParser.AllowLeadingWildcard = false;
。 领先的通配符绝对会降低性能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.