LuceneのStandardAnalyzerでbooleanQueryを使用する方法検索?Lucene BooleanQuery
3
A
答えて
6
あなたは、QueryParserオブジェクトを使用してブール型クエリを解析することを指摘していますか? Lucene query syntax documentationには、必要なものすべてが必要です。
0
BooleanQuery. BooleanQuery
は、オプション、必須または禁止のサブクエリであるブール句のコンテナです。
公共ボイド追加(クエリ、クエリ、必要なブール、禁止ブール)
2
文書によると、ブールクエリを一度に作成する必要があります:あなたは、通常のように見えるAPIメソッドを使用することBooleanQuery
に句を追加することができますBooleanQuery.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. Lucene BooleanQueryの間違った結果
- 2. BooleanQueryを防ぐ$ TooManyClausesエラーelasticsearch
- 3. 複数のフィールド間のBooleanQuery
- 4. Lucene 5.3.xでBooleanQuery Builderを使用するにはどうすればよいですか?
- 5. Lucene 6.0! BooleanQueryをインスタンス化し、それに他の検索クエリを追加する方法
- 6. Luceneのクエリ得点
- 7. 交差点 - Luceneの
- 8. BooleanQueryを使用するか、さらにインデックスを書き込むか?
- 9. luceneのタイトル/内容私はそうのように私のLuceneのドキュメントを格納してい
- 10. Luceneの問題検索フィールドのハイフネーション
- 11. のLucene/Hibernateは:@FullTextFilterDef FilterFactory
- 12. Lucene.Net:MultiFiledQueryParserをBooleanQueryに変換するにはどうすればよいですか?
- 13. Lucene。
- 14. Luceneの異常な動作
- 15. WhenepaceでLucene QueryStringを分割する最も効果的な方法
- 16. luceneのURLに基づいてレコードを取得する方法
- 17. Luceneクエリの任期文書のLuceneと
- 18. Luceneカスタムスコアリング
- 19. Lucene KeywordAnalyzer
- 20. luceneの
- 21. Luceneクエリータイムブースティングカルチャーコード
- 22. Luceneユニットテスト
- 23. luceneの
- 24. Luceneフルテキストクエリスペルチェック
- 25. Luceneチェックインデックスサイズ
- 26. Lucene Jackrabbit
- 27. lucene/python
- 28. Lucene PorterStemming
- 29. Lucene TermFrequenciesVector
- 30. なぜLucene QueryParserにアナライザが必要ですか
:あるBooleanQuery.Builder.add(org.apache.lucene.search.BooleanClause)
コード例はhttp://programtalk.com/java-api-usage-examples/org.apache.lucene.util.QueryBuilder/ と一例与えられたことで見つけることができます参照してください。ありがとうございました – Shashi