几个注意事项
1.建立索引时 插入的顺序(不设置document和字段的boost) 会影响到 查询结果的默认排序,建议:将最新生成的文章 最后建索引 这样 查询结果首先显示的是 最后插入的数据
2.BooleanQuery的多条件查询 一定是多个 must的组合,否则就不是 and关系了,如下代码:
3.查询时候亦可对 结果进行权重排序,通过设置Query的Boost属性即可,如下述代码所示
4.查询时,通常首先对关键词进行分词处理之后,再设置为多个分词的 查询条件,如下代码这一部分 foreach (var wordInfo in words)
5.建立索引时 分词被索引时 不区分大小写,也就是 你在查询的时候 必须按照 指定的大小写 查询,如果想解决这个大小写问题:建立索引时 多建一个统一小写的filed吧,查询时 也用小写后的关键词进行分词
//多字段查询三 Query query1 = null; var mQuery = new BooleanQuery(); //分类查询 query1 = new TermQuery(new Term("type", type)); mQuery.Add(query1, Occur.MUST); //通配符查询 if (string.IsNullOrEmpty(lang)) lang = "*"; query1 = new WildcardQuery(new Term("lang", lang)); mQuery.Add(query1, Occur.MUST); //范围查询 var beginTime = Convert.ToInt64(TimeHelper.ToUnixTimeStamp(DateTime.Now.AddYears(-3))); var endTime = Convert.ToInt64(TimeHelper.ToUnixTimeStamp(DateTime.Now.AddYears(0))); query1 = NumericRangeQuery.NewLongRange("time", 1, beginTime, endTime, true, true); mQuery.Add(query1, Occur.MUST); var keyQuery = new BooleanQuery(); foreach (var wordInfo in words) { //标题查询 query1 = new TermQuery(new Term("title", wordInfo.Word)) { Boost = 200 }; keyQuery.Add(query1, Occur.SHOULD); //内容查询 query1 = new TermQuery(new Term("body", wordInfo.Word)) { Boost = 2 }; keyQuery.Add(query1, Occur.SHOULD); } if(keyQuery.Any())mQuery.Add(keyQuery,Occur.MUST); TopDocs tds = searcher.Search(mQuery, 10);
时间: 2024-10-21 14:47:57