如何在Lucene搜索中使用带有StandardAnalyzer的booleanQuery?Lucene BooleanQuery
3
A
回答
6
我认为你指的是使用QueryParser对象解析布尔查询,是否正确? Lucene query syntax documentation应该有你需要的一切。
0
BooleanQuery. BooleanQuery
是布尔子句的容器,它是可选的,必需的或禁止的子查询。您可以在条款通常添加到BooleanQuery
利用,看起来像一个API的方法:
公共无效添加(查询的查询,需要布尔,布尔禁止)
2
根据该文件,应创建一次布尔查询通过BooleanQuery.QueryBuilder,然后被认为是不可变的。看看BooleanQuery.Builder.add(org.apache.lucene.search.BooleanClause)
的代码示例可以通过http://programtalk.com/java-api-usage-examples/org.apache.lucene.util.QueryBuilder/ 和一个例子给出的发现是:
public Query parse(Type type, String fieldName, Object value) throws IOException {
final String field;
MappedFieldType fieldType = context.fieldMapper(fieldName);
if (fieldType != null) {
field = fieldType.name();
} else {
field = fieldName;
}
/*
* If the user forced an analyzer we really don't care if they are
* searching a type that wants term queries to be used with query string
* because the QueryBuilder will take care of it. If they haven't forced
* an analyzer then types like NumberFieldType that want terms with
* query string will blow up because their analyzer isn't capable of
* passing through QueryBuilder.
*/
boolean noForcedAnalyzer = this.analyzer == null;
if (fieldType != null && fieldType.tokenized() == false && noForcedAnalyzer) {
return blendTermQuery(new Term(fieldName, value.toString()), fieldType);
}
Analyzer analyzer = getAnalyzer(fieldType);
assert analyzer != null;
MatchQueryBuilder builder = new MatchQueryBuilder(analyzer, fieldType);
builder.setEnablePositionIncrements(this.enablePositionIncrements);
Query query = null;
switch(type) {
case BOOLEAN:
if (commonTermsCutoff == null) {
query = builder.createBooleanQuery(field, value.toString(), occur);
} else {
query = builder.createCommonTermsQuery(field, value.toString(), occur, occur, commonTermsCutoff, fieldType);
}
break;
case PHRASE:
query = builder.createPhraseQuery(field, value.toString(), phraseSlop);
break;
case PHRASE_PREFIX:
query = builder.createPhrasePrefixQuery(field, value.toString(), phraseSlop, maxExpansions);
break;
default:
throw new IllegalStateException("No type found for [" + type + "]");
}
if (query == null) {
return zeroTermsQuery();
} else {
return query;
}
}
相关问题
- 1. BooleanQuery在Lucene的
- 2. 卢克Lucene的BooleanQuery
- 3. Lucene BooleanQuery错误结果
- 4. Lucene的BooleanQuery等于/在
- 5. Java Lucene - BooleanQuery和QueryParser的不同结果查询相同的Lucene查询语言
- 6. 在Lucene中将查询与BooleanQuery结合起来
- 7. 如何为Lucene结合使用BooleanQuery和Filter?
- 8. 使用booleanquery进行lucene排序 - 确定点击质量
- 9. 具有多个FuzzyQuery的Lucene BooleanQuery速度太慢
- 10. FuzzyQuery和BooleanQuery
- 11. Lucene.Net IndexSearcher的不BooleanQuery
- 12. 阻止BooleanQuery $ TooManyClauses错误elasticsearch
- 13. Lucene术语查询
- 14. BooleanQuery在多个字段之间
- 15. .NET的Lucene搜索万事
- 16. BooleanQuery $ TooManyClauses使用通配符查询时的异常
- 17. 使用Lucene更好的搜索结果
- 18. 的Lucene /休眠:@FullTextFilterDef不FilterFactory
- 19. 为什么Lucene QueryParser需要分析器
- 20. 从Lucene过渡到Solr(以SolrJ作为客户端) - 查询?
- 21. Lucene的:滤波不包含期限
- 22. Lucene:多词词组作为搜索词
- 23. 路口搜索 - Lucene的
- 24. Lucene的BooleanQuery.Builder构建不起作用
- 25. Lucene在日期上跳过NumericRangeQuery的年份
- 26. Lucene奇怪的行为
- 27. Lucene的问题searchinh连字号
- 28. 在lucene中搜索不包含字段的文档
- 29. Lucene的性能:从搜索器
- 30. 在Java中实现Lucene搜索的最佳实践
它的作品。谢谢 – Shashi 2009-06-04 09:59:41