Terms
Single Terms:
new Term("key",keyword);
Phrases:
PhraseQuery query = new PhraseQuery();
String[] words = sentence.split(" ");
for (String word : words) {
query.add(new Term("contents", word));
}
booleanQuery.add(query, BooleanClause.Occur.MUST)
Operator
Key:AND OR BETWEEN TO NOT ()(表示分组) +(前缀标识MUST的意思)
4.9+代码:
String searchString = "(name:cc OR title:aa) AND text:bb";
QueryParser queryParser = new QueryParser(whichField, new StandardAnalyzer());
Query query = queryParser.parse(searchString);
4.7.0代码:
/**
* 根据查询条件创建Query对象
* @fields queries中“:”之前的field字段
* @param queries 查询条件语句
* @return
* @throws Exception
*/
private Query createQuery(String[] fields, String queries) throws Exception {
QueryParser queryParser = new MultiFieldQueryParser(version, fields, new StandardAnalyzer(version));
Query query = queryParser.parse(queries);
return query;
}
Wildcard
Key:* ?
String searchString = "te?t";
QueryParser queryParser = new QueryParser(whichField, new StandardAnalyzer());
Query query = queryParser.parse(searchString);
Fuzzy Searches
Key:~
roam~ 匹配单词:form 和 roams.这中文估计不大一样
roam~0.8 0.8表示相似度。相似度0.8以及以上就可以查出结果
"jakarta apache"~10 表示2个单词距离为10以内就可以查出结果
用法和上面一样
Boosting a Term
Key:^
roam^4 keyword 表示因子为4,越大越重要。跟查询结果排序有关。
Escaping Special Characters
特殊字符:+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ 用"\"转义
有用的一些函数:
时间类型可以用DateTools转为String建立索引,查询的时候可以用datetime:[xx TO xx]
Date date = DateUtils.parseDate(value, "yyyy-MM-dd");
value = DateTools.dateToString(date, DateTools.Resolution.DAY);
doc.add(new StringField(name, value, Store.YES));
float , int , long 类型使用以下方式建立索引,查询的时候可以用number:[1.11 TO 2.11]。复合查询时用NumericRangeQuery
float flValue = Float.parseFloat(value);
type.setNumericType(NumericType.FLOAT);
doc.add(new FloatField(name, flValue, type));
根据查询字符串产生query
/**
* 根据查询条件创建Query对象
* @fields queries中“:”之前的field字段
* @param queries 查询条件语句
* @return
* @throws Exception
*/
private Query createQuery(String[] fields, String queries) throws Exception {
QueryParser queryParser = new MultiFieldQueryParser(version, fields, new StandardAnalyzer(version));
Query query = queryParser.parse(queries);
return query;
}
复合查询
String[] fields = new String[]{"packageName","className","date"};
Date d1 = fmt.parse("2013-01-00");
Date d2 = fmt.parse("2014-01-02");
String s = "["+d1.getTime()+" TO "+d2.getTime()+"]";
//字符串和时间合并查询
String queries = new String("packageName:vv AND className:vvNode4 AND date:"+s);
BooleanQuery query = new BooleanQuery();
//float类型单独查询,合并到上面查询结果就错误,所以单独
Query q1 = NumericRangeQuery.newFloatRange("value", 2.22f, 2.22f, true, true);
query.add(q1, BooleanClause.Occur.MUST);
//创建复合查询query
QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_47, fields, new StandardAnalyzer(Version.LUCENE_47));
Query q2 = queryParser.parse(queries);
query.add(q2, BooleanClause.Occur.MUST);
//查询
TopDocs tds = searcher.search(query, Integer.MAX_VALUE);
分享到:
相关推荐
本篇文章将深入探讨Lucene的查询语法,帮助你更好地进行数据查询与分析。 ### 1. 基本查询语法 Lucene的查询语法基于简单的字符串匹配,主要包含以下几种基本元素: - **单个词项查询 (Term Query)**:最基础的...
总结,"lucene相关jar+查询分析器jar"是一个包含了Lucene库以及可能特定查询分析器的集合,它为开发者提供了构建高效全文搜索功能的基础。通过理解Lucene的工作原理,掌握查询分析器的使用,以及灵活地调整和优化,...
- **语法分析**:构建查询语句的语法树。 - **语言处理**:处理查询语句,使其适合于搜索操作。 - **第三步:搜索索引**。 - **第四步:结果排序**。计算查询与文档的相关性得分,并按照得分高低对结果进行排序。 ...
自定义分析器与查询解析器 Lucene允许开发者自定义Analyzer和QueryParser,以适应特定的数据格式和查询需求。例如,你可以创建一个忽略大小写的Analyzer,或者一个支持中文分词的QueryParser。 ### 5. 性能与优化...
使用Lucene进行分词时,你需要选择合适的分析器,如对于中文,可以使用`ChineseAnalyzer`,然后创建索引并执行查询。分词是全文搜索的关键步骤,因为搜索引擎是通过分析和索引文档中的单词来进行匹配的。通过合理的...
- Lucene的核心组件包括索引(Index)、查询解析器(Query Parser)、搜索器(Searcher)和分词器(Tokenizer)。索引是搜索引擎的基础,负责将文本数据转化为可搜索的结构;查询解析器处理用户的输入,转化为可以...
Lucene提供了丰富的搜索功能,包括标准的布尔查询、短语查询、模糊查询以及高级的查询语法。它还支持对文本进行索引、存储和检索,使得开发者能够轻松地在大量数据中执行高效的全文搜索。 **盘古分词** 盘古分词是...
Lucene 4.7.0包含了一系列的分析器,如标准分析器(StandardAnalyzer)、关键词分析器(KeywordAnalyzer)等。分析器的选择会直接影响到搜索效果,因此在实际应用中,开发者需要根据具体需求选择合适的分析器。 三...
Lucene支持灵活的查询语法,允许用户通过自然语言风格的查询字符串来表达复杂的搜索需求。JavaCC是一个强大的编译工具,用于生成解析器,而QueryParser则是用于解析查询字符串的Lucene组件。 #### 七、Lucene的查询...
- 查询分析(Query Parsing):将用户的输入转换为查询语法,可能涉及短语查询、布尔查询等。 - 匹配评分(Scoring):Lucene使用TF-IDF(Term Frequency-Inverse Document Frequency)或其他评分算法,计算每个文档...
2. **增强搜索功能**:修改后的管理器可能提供了更复杂的查询构造器,支持更丰富的查询语法,或增加对布尔查询、短语查询等的支持。 3. **性能优化**:通过优化代码或调整索引读取策略,提高索引加载速度和查询效率...
2. **词法与语法分析**:解析查询,识别关键词和结构。 3. **搜索索引**:查找匹配关键词的文档。 4. **结果排序**:根据文档与查询的相关性排序结果,常用的方法是向量空间模型(VSM),其中计算每个文档的权重。 ...
查询的词法分析、语法分析以及语言处理确保了查询的准确性和效率。 4. **相关性评分**:Lucene使用向量空间模型(VSM)来评估文档与查询的相关性。这涉及到计算文档和查询向量之间的余弦相似度,其中向量的维度对应...
Lucene作为一个开源的全文检索库,通过其核心库和一系列组件,如分析器、查询解析器和高亮器,为开发者提供了完整的搜索引擎构建方案。了解并熟练掌握这些组件,可以帮助我们构建高效、准确且用户友好的搜索系统。在...
Lucene 3.6提供多种分析器,如StandardAnalyzer,用于处理英文文本,将文本分词、去除停用词等。 3. 索引写入:使用IndexWriter类,我们可以将分析后的文档添加到索引中。IndexWriter支持增量索引,即在已有索引的...
**JavaCC** 是一个用于生成词法分析器和语法分析器的工具,**QueryParser** 则是 Lucene 提供的一个用于解析查询字符串的类。 #### 九、Lucene 查询对象 **查询对象**是 Lucene 中用于表示查询逻辑的数据结构,...
- **查询逻辑**:用户输入查询条件,查询分析器解析并处理这些条件,生成一个内部表示,然后查询器在索引中执行这个表示,返回匹配的文档集合。结果集类似于JDBC的ResultSet,可以被进一步处理和展示。 3. **查询...
搜索过程中要对索引进行词法分析、语法分析和语言处理,然后根据向量空间模型算法计算权重,并对结果进行排序。而搜索过程的解析涉及到打分公式的数学推导和搜索过程的代码实现细节。 整个Lucene的工作流程表明,它...
- **索引创建**:通过Analyzer分析器对文档内容进行分词,并建立倒排索引。 - **索引更新**:当文档发生变化时,可以通过更新索引来保持索引的有效性。 - **索引优化**:为了提高查询效率,可以定期对索引进行优化...
6. **QueryParser**: 查询解析器将用户的自然语言查询转换为Lucene理解的查询语法,支持多种查询构造方式,如布尔运算符、短语查询等。 7. **ScoreDoc**: 当搜索器返回结果时,ScoreDoc对象包含了每个匹配文档的...