2012-01-17 6 views
0

にLuceneインデックスを検索します。 (趣味のフィールドは、異なる値で複数回追加できます)。はI 2つのコンテンツ項目(分析、&を格納索引付け)とインデックスを持つ複数のフィールド

私は、フィルタリングのために使用される唯一のインデックスが作成され、別のフィールド(un_analyzed &が保存されていない)があります。
例えば を:country_code

は今、私は(として最もよくとして一致する文書を検索するクエリを構築したいです可能な)いくつかの "検索"入力フィールドには、country_codeがいくつかの正確な値を持っているような文書だけです。

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

答えて

2

次のクエリを使用することができます。

country_code:india +(name:search_value OR hobbies:search_value) 
+0

ありがとう、それは私が必要なものでした。私はまた、冒頭に別の+を追加しました。 – epeleg

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); 
+0

は、あなたが2つのフィルタリングの選択肢について言った再より多くの情報を追加できますか?スコアリングにはどのような影響がありますか?パフォーマンスはどうですか? – epeleg

+0

他のstackoverflowの質問のように聞こえます:) – milan

関連する問題