`

Lucene进阶:and 和or的条件查询

阅读更多
     在用Lucene实现全站搜索的过程中,很可能会遇到这样的问题,只所有某种特定的信息资源,而不是全部.如:某综合性站点,有新闻,产品,论坛,Blog,视频等资源,而搜索的时候先选一个类型(下拉列表),再输入关键字进行搜索(当然,这种情况可以直接用sql来实现,我们这里是基于lucene的实现考虑).这种情况下,就要用到and和or的查询了.这里假设索引已经建立好了(如何建立索引请参考:http://www.iteye.com/topic/125599),索引字段为title(标题), type(资源类型,表示新闻还是产品,product为产品,news表新闻),则实现方法如下:
/**
* 根据信息分类和关键词进行查询
* @param type,资源的类型,其值为news或product
* @param searchKey,搜索的关键字
* @return Hits
*/
public Hits executeSearch(String type,String keyword)
{
  Hits result = null;
  if(type != null && !type.equals("") && keyword != null && !keyword.equals(""))
  {
    try 
    {
      //根据关键字构造一个数组
      String[] key = new String[]{keyword,type};
      //同时声明一个与之对应的字段数组
      String[] fields = {"title","type"};
      //声明BooleanClause.Occur[]数组,它表示多个条件之间的关系
      BooleanClause.Occur[] flags=new BooleanClause.Occur[]{BooleanClause.Occur.MUST,BooleanClause.Occur.MUST};
      ChineseAnalyzer analyzer = new ChineseAnalyzer();
      //用MultiFieldQueryParser得到query对象
      Query query = MultiFieldQueryParser.parse(key, fields, flags, analyzer);
      //c:/index表示我们的索引文件所在的目录
      IndexSearcher searcher = new IndexSearcher("c:/index");
      //查询结果
      result = searcher.search(query);
    } catch (Exception e)
    {
      e.printStackTrace();
    }
  }
  return result;
}

这里需要注意的就是BooleanClause.Occur[]数组,它表示多个条件之间的关系,BooleanClause.Occur.MUST表示and,BooleanClause.Occur.MUST_NOT表示not,BooleanClause.Occur.SHOULD表示or.
分享到:
评论
2 楼 tonyson 2008-09-23  
说到AND OR问题,借楼主宝地,发个贴:

默认关键字分割是OR,如果转成AND,则为:
parser.setDefaultOperator(QueryParser.AND_OPERATOR);
但是不知道为何,这样设置,什么都查不出来了,请问大家有没有遇到过这种情况

IndexSearcher is = new IndexSearcher(dir);//创建一个在指定文件目录上的IndexSearcher
QueryParser parser = new QueryParser("content", new MMAnalyzer());

parser.setDefaultOperator(QueryParser.AND_OPERATOR);

Query query = parser.parse("IRS_INFORMATION.CONTENT:救援 情况");//用QueryParser来parse查询字串,生成一个Query
Hits hits = is.search(query);//Query去查找结果,结果以Hits的形式返回

1 楼 piaochunzhi 2007-09-24  
BooleanClause.Occur[] flags=new BooleanClause.Occur[]{BooleanClause.Occur.MUST,BooleanClause.Occur.MUST};

2个 参数都是 BooleanClause.Occur.MUST 是什么 意思 是 && 这个意思  ????

相关推荐

    lucene高级搜索进阶项目_03

    在项目中,我们可能会探讨如何组合这些查询以实现布尔逻辑,比如AND、OR、NOT操作,以及如何利用Boosting来调整某些查询的优先级。同时,我们还将学习使用SpanQuery进行短语和近似匹配,以及使用FuzzyQuery处理拼写...

    lucene的查询语法事例

    在使用Lucene进行信息检索时,理解和掌握其查询语法至关重要。本篇文章将深入探讨Lucene的查询语法,帮助你更好地进行数据查询与分析。 ### 1. 基本查询语法 Lucene的查询语法基于简单的字符串匹配,主要包含以下...

    lucene高级搜索进阶项目_01

    查询可以包含简单的关键词、布尔操作符(AND、OR、NOT)以及短语查询。高级查询语法还包括字段限制、通配符查询、前缀查询和模糊查询。 四、搜索优化 1. **评分机制**:Lucene使用TF-IDF算法计算文档与查询的...

    lucene高级搜索进阶项目_02

    Lucene支持多种查询语法,包括布尔运算符(AND, OR, NOT)、短语查询、字段限制查询等。通过自定义QueryParser或使用Analyzer,我们可以控制查询的解析方式,以满足特定的搜索需求。 二、复杂查询类型 除了基本的...

    Lucene4.X实战类baidu搜索的大型文档海量搜索系统-12.Lucene搜索深入实战进阶2 共9页.pptx

    它允许用户使用自然语言风格的查询语法,如布尔运算符(AND, OR, NOT, +, -)和短语查询。然而,QueryParser并不适用于程序动态生成的查询字符串,建议直接使用API来构造查询器,以保证查询效率和准确性。 1. **...

    lucene部分案例的源代码

    - 布尔查询:允许用户使用AND、OR、NOT等逻辑运算符组合多个查询条件。 - 断词查询:支持模糊匹配和通配符查询,提高查询灵活性。 - 排序与评分:通过自定义ScoreDoc实现结果的定制排序,比如按相关度或时间降序排列...

    利用lucene给网站、系统增加搜索功能

    3. 布尔查询:通过AND、OR、NOT等逻辑操作符组合多个查询条件。 4. 排序和过滤:可以按照字段值进行排序,或者使用Filter对结果进行筛选。 5. 分页搜索:在大量结果中,可以实现分页显示,提高用户体验。 五、总结 ...

    Lucene 全文检索

    2. **布尔查询**:通过布尔操作符(AND, OR, NOT)组合多个查询条件,实现更复杂的查询需求。 3. **范围查询**:可以对数值类型字段进行范围过滤,例如在某个价格区间内查找商品。 4. **高亮显示**:在搜索结果中...

    lucene入门指南

    1. **多字段搜索(Multi-field Search)**: 可以同时在多个字段上进行搜索,使用布尔运算符(AND, OR, NOT)来组合查询。 2. **短语搜索(Phrase Search)**: 支持精确的短语匹配,如搜索“大数据技术”。 3. **...

    lucene 资料全集

    1. **多字段搜索**: 可以同时在多个字段上进行搜索,支持布尔逻辑操作(AND, OR, NOT)。 2. **模糊搜索**: 支持通配符、前缀、短语等模糊搜索。 3. **高亮显示**: 可以突出显示搜索结果中的匹配词。 4. **近实时...

    lucene入门

    1. **多字段搜索**:可以通过组合多个查询条件创建复杂的布尔查询,支持 AND、OR、NOT、AND NOT 操作。 2. **模糊搜索**:使用 WildcardQuery、FuzzyQuery 支持通配符和模糊匹配。 3. **范围查询**:使用 ...

    lucene 基础及代码分析

    4. **过滤与聚合**:Lucene 支持布尔运算符(AND, OR, NOT)和范围查询,可以进行复杂条件的过滤。同时,它还可以进行结果聚合,如分组、排序等。 ### 三、Lucene 实践 1. **创建索引**:在 Java 代码中,使用 ...

    Lucene 3.5 api HTML版

    - **布尔查询(Boolean Query)**: 允许组合多个查询条件,如 AND、OR 和 NOT。 - **短语查询(Phrase Query)**: 查找连续出现的关键词序列,常用于短语匹配。 - **模糊查询(Fuzzy Query)**: 支持相似度查询,...

    lucene笔记

    - **多字段搜索(Multi-field Search)**: 可以在多个字段上同时进行搜索,支持布尔运算符(AND, OR, NOT)和短语查询。 - **模糊搜索(Fuzzy Search)**: 允许用户进行拼写错误的搜索,如Levenshtein距离算法。 -...

    Lucene 搜索引擎框架 基础实践

    这个过程涉及对查询语法的处理,如布尔运算符(AND, OR, NOT)和短语匹配。 4. **搜索(Searching)**:查询对象与索引进行匹配,找到最相关的文档。Lucene 提供了多种评分算法,如TF-IDF,用于确定文档的相关性。 ...

    Lucene.Net_2_3_2.rar

    3. **构建查询**:使用QueryParser创建查询对象,指定查询字段和条件。 4. **执行搜索**:使用Searcher对象的Search方法执行查询,获取搜索结果。 5. **读取结果**:从Hit集合中获取匹配的文档,并解析其内容。 *...

    Lucene.net

    - **多字段搜索**:Lucene.NET 支持对多个字段同时进行搜索,可以组合使用布尔运算符(AND、OR、NOT)来构造复杂的查询。 - **模糊搜索**:通过设置通配符和模糊度参数,可以进行模糊搜索,找到相似但不完全匹配的...

    Lucene 3.0 原理与代码分析完整版

    布尔运算符(AND, OR, NOT)可以用来组合多个词项,形成复杂的查询条件。同时,评分机制(TF-IDF)用于评估文档与查询的相关性,以确定搜索结果的排序。 **5. 进阶特性** - **多字段搜索**:Lucene允许在多个字段...

    lucence视频全面例子

    2. 布尔查询:通过逻辑运算符(AND、OR、NOT)组合多个关键词,实现复杂的查询需求。 3. 排序与评分:Lucene提供TF-IDF算法来计算文档的相关性,根据评分进行排序。 4. 断词搜索:通过分析器,Lucene能识别出同义...

    elasticsearch权威指南.pdf

    - **Bool Query**:组合其他查询条件,实现AND、OR、NOT逻辑。 - **Aggregations**:允许进行数据汇总,如统计、平均、最大值等,用于报表和分析。 **四、实战应用** 1. **日志分析**:Elasticsearch常用于收集、...

Global site tag (gtag.js) - Google Analytics