为了账号安全,请及时绑定邮箱和手机立即绑定

Lucene.Net多条件作‘and’和'or'查询

Lucene.Net多条件作‘and’和'or'查询

ABOUTYOU 2018-12-06 16:13:55
利用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); //游戏画面 }
查看完整描述

3 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

Must 和 Should 在一起 是取得Must结果的倒排序结果 如果文档包含Should的结果,则增加打分。

Must和Must在一起取交集。

Should和Should一起取并集。

查看完整回答
反对 回复 2019-01-21
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

这是全部代码吗?

查看完整回答
反对 回复 2019-01-21
  • 3 回答
  • 0 关注
  • 605 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信