首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lucene BooleanQuery

Lucene BooleanQuery
EN

Stack Overflow用户
提问于 2009-06-04 09:06:49
回答 3查看 2.9K关注 0票数 3

如何在Lucene搜索中结合使用booleanQuery和StandardAnalyzer?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-04 09:08:58

我假设您指的是使用QueryParser对象解析布尔查询,对吗?Lucene query syntax documentation应该拥有您需要的一切。

票数 6
EN

Stack Overflow用户

发布于 2016-12-05 19:36:07

根据文档,布尔查询应该由BooleanQuery.QueryBuilder创建一次,然后被认为是不可变的。请参阅BooleanQuery.Builder.add(org.apache.lucene.search.BooleanClause)

代码示例可以通过http://programtalk.com/java-api-usage-examples/org.apache.lucene.util.QueryBuilder/找到,给出的一个示例是:

代码语言:javascript
复制
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;
    }
}
票数 2
EN

Stack Overflow用户

发布于 2012-06-28 00:28:40

BooleanQuery. BooleanQuery是布尔子句的容器,这些子句是可选的、必需的或禁止的子查询。您通常可以使用如下所示的API方法向BooleanQuery添加一个子句:

public void add(查询查询,需要布尔值,禁止布尔值)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/949398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档