zoukankan      html  css  js  c++  java
  • 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,使其代码更简洁,更容易操作。。
  • 相关阅读:
    WPF编译时提示"xxx不包含适合于入口点的静态 Main方法xxx"
    被解放的姜戈04 各取所需
    SublimeText3 snippet 编写总结
    安装 Apache 出现 <OS 10013> 以一种访问权限不允许的方式做了一个访问套接字的尝试
    被解放的姜戈03 所谓伊人
    被解放的姜戈02 庄园疑云
    被解放的姜戈01 初试天涯
    EXP-00000: Message 0 not found; No message file for product=RDBMS, facility=EXP问题的解决方案
    Python网络02 Python服务器进化
    Python网络01 原始Python服务器
  • 原文地址:https://www.cnblogs.com/xiaoshouzi/p/3195011.html
Copyright © 2011-2022 走看看