Lucene Search の StandardAnalyzer で booleanQuery を使用するには?
2937 次
3 に答える
6
QueryParser オブジェクトを使用してブールクエリを解析することについて言及していると思いますよね?Lucene クエリ構文のドキュメントには、必要なものがすべて含まれているはずです。
于 2009-06-04T09:08:58.353 に答える
2
ドキュメントによると、ブールクエリは BooleanQuery.QueryBuilder によって一度作成された後、不変と見なされる必要があります。BooleanQuery.Builder.add(org.apache.lucene.search.BooleanClause)を参照してください。
コード例はhttp://programtalk.com/java-api-usage-examples/org.apache.lucene.util.QueryBuilder/で見つけることができ 、1 つの例は次のとおりです。
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;
}
}
于 2016-12-05T11:36:07.430 に答える
0
BooleanQuery. BooleanQuery
オプション、必須、または禁止されたサブクエリであるブール句のコンテナです。BooleanQuery
通常、次のような API メソッドを使用するための句を追加できます。
public void add(クエリクエリ、ブール値必須、ブール値禁止)
于 2012-06-27T16:28:40.417 に答える