0

休止状態で FullTextFilters を FullTextQuery に追加しようとしていますが、メソッドしかありませんFullTextFilter.setParameter(String name, Object value)

検索するエンティティに基づいてクエリにフィルターを追加する柔軟で汎用的な関数を作成しようとしています.1つのパラメーターを持つものもあれば、フィルターに2つのパラメーターを持つものもあるため、にメソッドを追加したいと思いFullTextFilterImplます。setParameters(String[] names, String[] value)ここで、すべてのパラメーターの名前と、おそらく各パラメーターの値の多次元配列を渡して、現在のコードを変換できます

If( "checking which entity it is"){
  fullTextQuery.enableFullTextFilter("FilterName").setParameter("firstFilter", "val1").setParameter("secondFilter", "val2");
}
else if("this entity's filter only has one parameter"){
     fullTextQuery.enableFullTextFilter("FilterName").setParameter("firstFilter", "val1");
}

FullTextFilterImpl のサブクラスを作成して関数を入れようとしましたsetParametersが、このコードの設定方法では、オブジェクトをFullTextQuery.enableFullTextFilter(filterName)返し、そのFullTextFilterオブジェクトで を呼び出す方法がわかりませんsetParameter()。どうやってその途中で何かをするのかわかりませんsetParameters

編集: hibernate-search ソース コードをダウンロードし、次のメソッドを FullTextFilterImpl に追加しました。これらのチェックスタイルOnly one new line is allowed at the end of a fileエラー。休止状態のクイックビルドガイドに欠けているものはありますか?

public FullTextFilter setParameters(Map<String, List<String>> params){
    for (String key : params.keySet()) {
        List<String> values = params.get(key);
        for(int i=0; i< values.size() ; i++){
            parameters.put(key, values.get(i));
        }
    }
    return this;
}
4

3 に答える 3

1

私があなたの質問を正しく理解していれば、ビルダーパターンが必要です

ここで使用できる例:

public class FullTextFilter {

    String[] keys;
    Object[] objects;

    private FullTextFilter(String[] keys, Object[] objects) {
    }

    public static FullTextFilterBuilder builder(){
        return new FullTextFilterBuilder();
    }

    public static class FullTextFilterBuilder {

        private Map<String, Object> parameters = new HashMap<String, Object>();

        public FullTextFilterBuilder setParameter(String key, Object value){
            parameters.put(key, value);
            return this;
        }

        public FullTextFilter build(){
            return new FullTextFilter(parameters.keySet().toArray(new String[0]), parameters.values().toArray(new Object[0]));
        }
    }

}

そして、次のように使用します:

FullTextFilter filter = FullTextFilter.builder().setParameter("", new Object()).setParameter("", new Object()).build();

それがあなたが探しているものかどうか教えてください。そうでない場合は、回答を削除します

于 2013-10-24T18:04:02.690 に答える
1

属性のマップをカスタム フィルターに簡単に渡すことができます。署名は次のとおりです。

FullTextFilter setParameter(String name, Object value);

あなたができるように

filter.setParameter( "myMap", properties );

ここで、プロパティはハッシュマップです。

コンパイル エラー メッセージについて:

ファイルの最後に許可される改行は 1 行だけです

は checkstyle からのメッセージで、コード スタイルが Hibernate コード スタイルに準拠していることを確認します。修正は非常に簡単です。ソース ファイルの最後に複数の空の行があるので、それらを削除します。エラー メッセージは、どのファイルを洗練する必要があるかを示しているはずです。

于 2013-10-25T16:57:24.357 に答える