使用Lucene.Net 3.0.3。 我有几个类,有这样的字段:
public class Test1
{
public string Name {get;set;}
}
我如何创建索引:
var doc = new Document();
doc.Add(new Field(KEYWORDS_FIELD_NAME, someUid, CultureInfo.InvariantCulture), Field.Store.YES, Field.Index.ANALYZED));
我如何创建查询:
var analyzer=new RussianAnalyzer(Version.LUCENE_30);
private Query ParseQuery(string queryString,Analyzer analyzer)
{
var classQuery = new BooleanQuery();
var hs = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
foreach(var par in Parameters)
{
classQuery.add(new TermQuery(new Term(KEYWORDS_FIELD_NAME,par.ClassName.ToLower()),Occur.SHOULD);
hs.add(par.PropertyName);
}
var parser=new MultiFieldQueryParse(Version.LUCENE_30, hs.ToArray(), analyzer);
var multiQuery=parser.Parse(queryString.Ttim());
var result=new BooleanQuery
{
{classQuery,Occur.MUST},
new BooleanClause(multiQuery,Occur.MUST)
};
return result;
}
搜索请求:
var query=ParseQuery(queryString,analuzer);
using (var searcher = new IndexSearcher(luceneDirectory))
{
var hits = searcher.Search(query, null, 10000);
}
在搜索索引中,有一个类Test1的“Name”属性。 属性的一些值是:
40002 40001 4001 4009
和其他类似的值。
当我输入“4001”时,搜索产生一个结果。这适合我。 但是,当我输入“400”时,搜索没有找到任何值。 我知道这个值不在索引中,但我希望在这种情况下搜索会找到“相似”的值:4001,40002和其他。
可以这样做吗?我究竟做错了什么? 谢谢。
P.S。它适用于“400 *”和没有RegexQuery的MultiFieldQuery。它每30%减速。 当我使用RegexQuery-70-80%。