在用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.
分享到:
- 2007-09-24 10:39
- 浏览 4745
- 评论(2)
- 论坛回复 / 浏览 (2 / 9594)
- 查看更多
相关推荐
在项目中,我们可能会探讨如何组合这些查询以实现布尔逻辑,比如AND、OR、NOT操作,以及如何利用Boosting来调整某些查询的优先级。同时,我们还将学习使用SpanQuery进行短语和近似匹配,以及使用FuzzyQuery处理拼写...
在使用Lucene进行信息检索时,理解和掌握其查询语法至关重要。本篇文章将深入探讨Lucene的查询语法,帮助你更好地进行数据查询与分析。 ### 1. 基本查询语法 Lucene的查询语法基于简单的字符串匹配,主要包含以下...
查询可以包含简单的关键词、布尔操作符(AND、OR、NOT)以及短语查询。高级查询语法还包括字段限制、通配符查询、前缀查询和模糊查询。 四、搜索优化 1. **评分机制**:Lucene使用TF-IDF算法计算文档与查询的...
Lucene支持多种查询语法,包括布尔运算符(AND, OR, NOT)、短语查询、字段限制查询等。通过自定义QueryParser或使用Analyzer,我们可以控制查询的解析方式,以满足特定的搜索需求。 二、复杂查询类型 除了基本的...
它允许用户使用自然语言风格的查询语法,如布尔运算符(AND, OR, NOT, +, -)和短语查询。然而,QueryParser并不适用于程序动态生成的查询字符串,建议直接使用API来构造查询器,以保证查询效率和准确性。 1. **...
- 布尔查询:允许用户使用AND、OR、NOT等逻辑运算符组合多个查询条件。 - 断词查询:支持模糊匹配和通配符查询,提高查询灵活性。 - 排序与评分:通过自定义ScoreDoc实现结果的定制排序,比如按相关度或时间降序排列...
3. 布尔查询:通过AND、OR、NOT等逻辑操作符组合多个查询条件。 4. 排序和过滤:可以按照字段值进行排序,或者使用Filter对结果进行筛选。 5. 分页搜索:在大量结果中,可以实现分页显示,提高用户体验。 五、总结 ...
2. **布尔查询**:通过布尔操作符(AND, OR, NOT)组合多个查询条件,实现更复杂的查询需求。 3. **范围查询**:可以对数值类型字段进行范围过滤,例如在某个价格区间内查找商品。 4. **高亮显示**:在搜索结果中...
1. **多字段搜索(Multi-field Search)**: 可以同时在多个字段上进行搜索,使用布尔运算符(AND, OR, NOT)来组合查询。 2. **短语搜索(Phrase Search)**: 支持精确的短语匹配,如搜索“大数据技术”。 3. **...
1. **多字段搜索**: 可以同时在多个字段上进行搜索,支持布尔逻辑操作(AND, OR, NOT)。 2. **模糊搜索**: 支持通配符、前缀、短语等模糊搜索。 3. **高亮显示**: 可以突出显示搜索结果中的匹配词。 4. **近实时...
1. **多字段搜索**:可以通过组合多个查询条件创建复杂的布尔查询,支持 AND、OR、NOT、AND NOT 操作。 2. **模糊搜索**:使用 WildcardQuery、FuzzyQuery 支持通配符和模糊匹配。 3. **范围查询**:使用 ...
4. **过滤与聚合**:Lucene 支持布尔运算符(AND, OR, NOT)和范围查询,可以进行复杂条件的过滤。同时,它还可以进行结果聚合,如分组、排序等。 ### 三、Lucene 实践 1. **创建索引**:在 Java 代码中,使用 ...
- **布尔查询(Boolean Query)**: 允许组合多个查询条件,如 AND、OR 和 NOT。 - **短语查询(Phrase Query)**: 查找连续出现的关键词序列,常用于短语匹配。 - **模糊查询(Fuzzy Query)**: 支持相似度查询,...
- **多字段搜索(Multi-field Search)**: 可以在多个字段上同时进行搜索,支持布尔运算符(AND, OR, NOT)和短语查询。 - **模糊搜索(Fuzzy Search)**: 允许用户进行拼写错误的搜索,如Levenshtein距离算法。 -...
这个过程涉及对查询语法的处理,如布尔运算符(AND, OR, NOT)和短语匹配。 4. **搜索(Searching)**:查询对象与索引进行匹配,找到最相关的文档。Lucene 提供了多种评分算法,如TF-IDF,用于确定文档的相关性。 ...
3. **构建查询**:使用QueryParser创建查询对象,指定查询字段和条件。 4. **执行搜索**:使用Searcher对象的Search方法执行查询,获取搜索结果。 5. **读取结果**:从Hit集合中获取匹配的文档,并解析其内容。 *...
- **多字段搜索**:Lucene.NET 支持对多个字段同时进行搜索,可以组合使用布尔运算符(AND、OR、NOT)来构造复杂的查询。 - **模糊搜索**:通过设置通配符和模糊度参数,可以进行模糊搜索,找到相似但不完全匹配的...
布尔运算符(AND, OR, NOT)可以用来组合多个词项,形成复杂的查询条件。同时,评分机制(TF-IDF)用于评估文档与查询的相关性,以确定搜索结果的排序。 **5. 进阶特性** - **多字段搜索**:Lucene允许在多个字段...
2. 布尔查询:通过逻辑运算符(AND、OR、NOT)组合多个关键词,实现复杂的查询需求。 3. 排序与评分:Lucene提供TF-IDF算法来计算文档的相关性,根据评分进行排序。 4. 断词搜索:通过分析器,Lucene能识别出同义...
- **Bool Query**:组合其他查询条件,实现AND、OR、NOT逻辑。 - **Aggregations**:允许进行数据汇总,如统计、平均、最大值等,用于报表和分析。 **四、实战应用** 1. **日志分析**:Elasticsearch常用于收集、...