MultiFieldQueryParser
クラスは、QueryParser
クラスを拡張します。おそらく、静的メソッドに頼るのではなく、単にこのクラスのインスタンスを設定することができますか? BooleanClause.Occur
の値を実際に設定する必要がある場合は、後でそれを行うことができます。
String queryString = ...;
String[] fields = ...;
Analyzer analyzer = ...;
MultiFieldQueryParser queryParser = new MultiFieldQueryParser(fields, analyzer);
queryParser.setDefaultOperator(QueryParser.Operator.AND);
Query query = queryParser.parse(queryString);
// If you're not happy with MultiFieldQueryParser's default Occur (SHOULD), you can re-configure it afterward:
if (query instanceof BooleanQuery) {
BooleanClause.Occur[] flags = ...;
BooleanQuery booleanQuery = (BooleanQuery) query;
BooleanClause[] clauses = booleanQuery.getClauses();
for (int i = 0; i < clauses.length; i++) {
clauses[i].setOccur(flags[i]);
}
}
ありがとうございます。欠落していたステップは、後でOccur値を構成する方法でした。 私が取り組んでいるもう1つのアプローチは、MultiFieldQueryParser.parseのコードが小さいため、アプリケーションに貼り付けて変更するだけかもしれません。 QueryParserインスタンス自体が作成されるので、デフォルトの演算子を設定するためにそれを微調整することができます。 –
繰り返しループ内では、次のコマンドを使用してフィールドごとの結合を変更することもできます。 QueryParser = new QueryParser(Version.YOUR_VERSION、fields [i]、new YourAnalyzer()); parser.setDefaultOperator(QueryParser.Operator.AND);clause.setQuery(parser.parse(clause.getQuery()。toString(fields [i]))); – Ina