0

2つのコンテンツフィールド(分析、インデックス付け、保存)を持つインデックスがあります:
例:namehobbies。(趣味フィールドは、異なる値で複数回追加できます)。

フィルタリングに使用されるインデックス付け(un_analyzed&storedではない)のみの別のフィールドがあります。
例:country_code

ここで、「検索」入力フィールドに(可能な限り)一致するドキュメントを取得するクエリを作成しますがcountry_code、正確な値を持つドキュメントのみを取得します。

そのようなクエリを構築するために使用するのに最も適切な組み合わせクエリ構文/クエリパーサーは何でしょうか。

4

2 に答える 2

2

から始めてみませんかQueryParser。ユースケースで機能する可能性があり、最小限の労力で済みます。

あなたの質問からは明らかではありませんが、単一の入力フィールド(「検索」)と国コードのコンボボックスがあると仮定しましょう。次に、これらの値を読み取り、クエリを作成します。

// you don't have to use two parsers, you can do this using one.
QueryParser nameParser = new QueryParser(Version.LUCENE_CURRENT, "name", your_analyzer);
QueryParser hobbiesParser = new QueryParser(Version.LUCENE_CURRENT, "hobbies", your_analyzer);

BooleanQuery q = new BooleanQuery();
q.add(nameParser.parser(query), BooleanClause.Occur.SHOULD);
q.add(hobbiesParser.parser(query), BooleanClause.Occur.SHOULD);BooleanClause.Occur.SHOULD);

/* Filtering by country code can be done using a BooleanQuery 
 * or a filter, the difference will be how Lucene scores matches. 
 * For example, using a filter:
 */
Filter countryCodeFilter = new QueryWrapperFilter(new TermQuery(new Term("country_code", )));

//and finally searching:
TopDocs topDocs = searcher.search(q, countryCodeFilter, 10);
于 2012-01-17T11:32:10.133 に答える
2

次のクエリを使用できます。

country_code:india +(name:search_value OR hobbies:search_value)
于 2012-01-18T09:48:05.653 に答える