2012-05-10 3 views
0

複合フィールドをLuceneクエリに適用する関数の実装に問題があります。代わりにLuceneクエリを入力するの複合フィールドをluceneクエリに展開する機能

タイトル:「右ウェイ」件名:「右の方法」

私は、ユーザーが入力できるようにしたい:

すべて: "右ウェイ "

ここで、すべては実フィールドのタイトルと件名で構成される複合フィールドです。この関数は、合成フィールドの構成要素を展開した有効なルーネンクエリを生成する必要があります。

文字列のクエリ= applyCompositeFields(文字列のクエリ文字列compositeField、String []型のサブフィールド){

} 供給クエリはLuceneクエリ構文に従って任意のクエリとすることができる(参照:http://lucene.apache.org/core/old_versioned_docs/versions/3_0_0/queryparsersyntax.html#Range%20Searches)を

について例:

すべて:

:[20030101 TO 20020101]

はに拡大すべき10

タイトル:[20020101 TO 20030101]件名:[20020101 TO 20030101]

複雑なクエリの入力を壊さずにこれをうまくやる方法はありますか?

私はLuceneクエリオブジェクトモデルを使用しようとしましたが、クエリ要素にフィールド名を設定することはできません。無用です。

答えて

0

あなたが探しているのはMultiFieldQueryParserだと思います。

編集

MultiFieldQueryParserは以下となります。フィールドがクエリ文字列に明示的でない場合

  • は("The Right Way"
  • は、単一のフィールドの上に、通常のクエリを使用するいくつかのフィールドの中でクエリを派遣しますそうでなければ(title:"The Right Way")。たとえば、

MultiFieldQueryParser qp = new MultiFieldQueryParser(
      Version.LUCENE_36, new String[] { "subject", "body" }, 
      new KeywordAnalyzer()); 
    System.out.println(qp.parse("subject:\"hello\" body:test AND [1222 TO 2333]")); 

プリント

subject:hello +body:test +(subject:[1222 TO 2333] body:[1222 TO 2333]) 

あなたは仮想複合フィールドallであなたの構文に固執する場合は、とき、フィールド、特殊なケースを追加するQueryParserを拡張することができ名前はallです。ソースコードMultiFieldQueryParserを見て、インスピレーションを得ることができます。

+0

どのようにですか?私が言うことからではありません。 – user1387012

+0

クエリには、非複合フィールドも含まれます。例: all:[20020101 TO 20030101]件名:lucene – user1387012

+0

このシナリオでは、MultiFieldQueryParserは動作しません。私たちはいくつかの複合的なフィールドを持っていますが、他のフィールドは複雑ではありません。 "hello" body:test AND all:[1222 to 2333]というように。 – user1387012

関連する問題