Lucene.Net:search找不到所有值

时间:2018-01-11 11:18:52

标签: c# lucene lucene.net

使用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%。

1 个答案:

答案 0 :(得分:1)

尝试搜索400 *,您还需要WildCardQuery 不是BooleanQuery

相关问题