Lucene에서 StandardAnalyzer와 booleanQuery를 사용하는 방법 검색?Lucene BooleanQuery
3
A
답변
6
나는 당신이 QueryParser 객체를 사용하여 부울 쿼리를 구문 분석하는 것을 말하는 것으로 생각하십니까? Lucene query syntax documentation에는 필요한 모든 것이 있어야합니다.
0
BooleanQuery. BooleanQuery
은 선택적, 필수 또는 금지 된 하위 쿼리 인 Boolean 절의 컨테이너입니다.
공공 무효 추가 기능 (쿼리 쿼리, 필요한 부울 금지 부울)
2
문서에 따르면, 부울 쿼리를 한 번 작성해야합니다 : 당신은 일반적으로처럼 보이는 API 방법을 활용 BooleanQuery
에 절을 추가 할 수 있습니다 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?
- 2. 누가 루씬 BooleanQuery 누가 복음에서
- 3. Java에서 Lucene 검색 구현을위한 모범 사례
- 4. Lucene 추가 필터를 추가하면 결과가 없습니다.
- 5. Lucene 이상한 행동
- 6. lucene API를 사용하여 중첩 된 부울 쿼리를 만드는 방법 (AND (b OR c))?
- 7. Lucene 인덱싱
- 8. Lucene 버전
- 9. Lucene 성능
- 10. Lucene QueryParser
- 11. lucene/python
- 12. Lucene TermFrequenciesVector
- 13. Lucene Jackrabbit
- 14. BooleanQuery $ 와일드 카드 쿼리를 사용할 때 예외가 발생합니다.
- 15. Lucene 색인 오류 해결
- 16. Lucene 채점에 관한 질문
- 17. Lucene 점수 결과
- 18. 기간별 Lucene 표준 분석기
- 19. 병합 인수, minMergeDocs, Lucene
- 20. Cakephp에서 Zend Lucene 사용하기
- 21. Lucene 3.0.2 features
- 22. Lucene 검색에서 Untokenized 필드
- 23. Lucene Chinese Analyzer .NET
- 24. 경계가있는 Lucene 근접 검색?
- 25. Lucene 일본어 문자 검색
- 26. 스페인어 분석기 (lucene 포함)
- 27. Lucene 칼럼 CLOB 인덱싱
- 28. Lucene 문자열 쿼리
- 29. lucene 파일 인덱스
- 30. Lucene for Blackberry OS?
그것은 작동합니다. 고맙습니다 – Shashi