利用Lucene.net实现站内搜索功能,用输入的关键字去匹配已生成索引文件中字段获得的结果是符合要求的,但当有选择某一个种类型时,却把所有这种类型的数据都搜出来了,关键字似乎已经不起作用了,求大虾帮忙解决下。
“and”、“or”条件查询的主要代码如下:
BooleanQuery bq = new BooleanQuery();
QueryParser cnParser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "GameCnName", analyzer);
Query cnQuery = cnParser.Parse(keyword);
bq.Add(cnQuery, BooleanClause.Occur.SHOULD);//游戏中文名
QueryParser enQueryParser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "GameEnName", analyzer);
Query enQuery = enQueryParser.Parse(keyword);
bq.Add(enQuery, BooleanClause.Occur.SHOULD); //游戏英文名
QueryParser companyQueryParser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "CompanyName", analyzer);
Query companyQuery = companyQueryParser.Parse(keyword);
bq.Add(companyQuery, BooleanClause.Occur.SHOULD); //游戏公司名
if (queryDictionary.ContainsKey("GamePlatform"))
{
Query pfQuery = new TermQuery(new Term("GamePlatform", queryDictionary["GamePlatform"]));
bq.Add(pfQuery, BooleanClause.Occur.MUST); //游戏平台
}
if (queryDictionary.ContainsKey("NavCategory"))
{
Query navQuery = new TermQuery(new Term("NavCategory", queryDictionary["NavCategory"]));
bq.Add(navQuery, BooleanClause.Occur.MUST); //游戏产地
}
if (queryDictionary.ContainsKey("GameEngine"))
{
Query engQuery = new TermQuery(new Term("GameEngine", queryDictionary["GameEngine"]));
bq.Add(engQuery, BooleanClause.Occur.MUST); //游戏画面
}
一只甜甜圈
米琪卡哇伊