문제

Lucene 검색에서 StandardAnalyzer와 함께 부울 쿼리를 사용하는 방법은 무엇입니까?

도움이 되었습니까?

해결책

QueryParser 객체를 사용하여 부울 쿼리를 구문 분석하고 있다고 가정합니다. 그만큼 Lucene Query Syntax 문서 필요한 모든 것이 있어야합니다.

다른 팁

문서에 따르면 부울 쿼리는 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;
    }
}

BooleanQuery. BooleanQuery 부울 조항의 컨테이너는 선택 사항, 필수 또는 금지 하위 쿼리입니다. 일반적으로 절을 추가 할 수 있습니다 BooleanQuery 모양의 API 방법을 사용합니다.

public void add (쿼리 쿼리, 부울 필요, 부울 금지)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top