• Lucene.net 多条件查询搜索


    最近一直在研究lucene,目的是想让网站实现像搜索引擎那样的搜索,可以快速、准确的帮用户查询出想要的结果。废话不多说,上代码实例:


    1.利用BooleanQuery进行多条件搜索(比较灵活)
     
    Lucene.Net.Search.BooleanQuery boolQuery = new Lucene.Net.Search.BooleanQuery();
     
    Lucene.Net.QueryParsers.QueryParser parser = new Lucene.Net.QueryParsers.QueryParser("title", pgAnalyzer);
    boolQuery.Add(parser.Parse(this.txtKeywords.Text), Lucene.Net.Search.BooleanClause.Occur.MUST);
     
    parser = new Lucene.Net.QueryParsers.QueryParser("productsummary", pgAnalyzer);
    boolQuery.Add(parser.Parse(this.txtKeywords.Text), Lucene.Net.Search.BooleanClause.Occur.SHOULD);
    Lucene.Net.Search.Hits hits = search.Search(boolQuery);
    在这里,首先是初始化一个BooleanQuery对象,然后它有一个方法,是需要两个参数,一个是Lucene.Net.Search.Query对象,另一个是Lucene.Net.Search.BooleanClause.Occur枚举。第一个参数不难理解,着重说明第二个参数,它表示的是传入进来的搜索,应该以怎样的方式进行搜索,这里Occur枚举有几种类型,MUST、MUST_NOT、SHOULD,MUST表示,要搜索的词在指定的字段里(Query对象以指定)必须出现,而MUST_NOT则是完全相反的,SHOULD表示可出现可不出现,这样的话,意思就很容易懂了,第一个是表示说我要搜索的词,在Title 这个字段中,必须要出现的,而第二个则说明,在productsummary这个字段中,可出现可不出现。。。这样检索出来的结果就是,在Title中必须出现而在productsummary可有可无的结果集合。。
     
    2.利用 MultiFieldQueryParser
    string[] fileds = { "title", "productsummary" };
    Lucene.Net.Search.BooleanClause.Occur[] occurs = new Lucene.Net.Search.BooleanClause.Occur[] { Lucene.Net.Search.BooleanClause.Occur.MUST, Lucene.Net.Search.BooleanClause.Occur.SHOULD };
     
    Lucene.Net.Search.Query query = Lucene.Net.QueryParsers.MultiFieldQueryParser.Parse(this.txtKeywords.Text, fileds, occurs, pgAnalyzer);
    Lucene.Net.Search.Hits hits = search.Search(query);
     
    经过搜索测试,两者的结果是一样的,但是有个疑问的是,MultiFieldQueryParser.parse方法,传入的查询关键词数组,字段数组,occur数组,长度要一致,这个经过测试了几次,确实是这样子,可以查一个词,但是字段和occur要长度一致,大概是要进行一一匹配起来,这个可以做多个测试进行猜想,MultiFieldQueryParser应该是封装了BooleanQuery,使其代码更简洁,更容易操作。。
  • 相关阅读:
    IDEA @override处标红
    IntelliJ IDEA 出现" java: 程序包javax.servlet不存在、 java: 程序包javax.servlet.annotation"等错误
    IDEA中提示配置jdk1.8
    bootstrap datetimepicker 添加清空按钮
    JS中常用的Math方法
    JS数组常用方法总结
    JS字符串常用方法总结
    阻止a链接跳转方法总结
    node常见操作命令
    RAC升级后,一个节点无法连接数据库,报ORA-12537: TNS:connection closed
  • 原文地址:https://www.cnblogs.com/xiaoshouzi/p/3195011.html
Copyright © 2020-2023  润新知