在Lucene.NET 3.0中搜索和索引的最佳方法是什么,以便按以下方式排序结果:
示例:搜索栏
订购结果:
Lucene一般不支持基于字段内的位置进行搜索/评分。如果您使用某些已知的fieldstart分隔符或其他内容为每个字段添加前缀,则可以支持它。我不认为这是有道理的,在全文搜索的镜头中,文本字段中的位置不相关(即,如果我在文档中搜索Bar,如果“Bart,我可能会相当恼火”辛普森“在国家律师协会之前被退回”)
除此之外,简单的前缀搜索处理其他一切。因此,如果您只是添加单词标记的开头,则可以使用比原始标记更高的加速前缀查询来搜索修改后的术语,然后您应该准确地描述您所描述的内容。
它可以通过linq实现。使用命中计数Int32.MaxValue进行lucene搜索。循环ScoreDocs的结果并将其存储在集合Searchresults中。
示例代码:
Searchresults = (from scoreDoc in results.ScoreDocs select (new SearchResults { suggestion = searcher.Doc(scoreDoc.Doc).Get("suggestion") })).OrderBy(x => x.suggestion).ToList();
Searchresultsstartswith = Searchresults.Where(x => x.suggestion.ToLower().StartsWith(searchStringLinq.ToLower())).Take(10).ToList();
if (SearchresultsStartswith.Count > 0)
return SearchresultsStartswith.ToList();
else
return Searchresults.Take(10).ToList();