Elasticsearchプラグインをバージョン2.4.0から5.4.0にアップグレードします。このプラグインはカスタムクエリを実装していますが、Elasticsearch Java Apiの新しい変更では、新しいクエリを登録する方法が少し分かりません。私はElasticsearchサイトを検索して、SearchPlugin
インターフェイスを実装し、メソッドgetQueries
をオーバーライドする必要があることが判明しましたが、私はまだ混乱しています。どんな助け?弾性検索クエリプラグイン
public class MyQueryPlugin extends Plugin implements SearchPlugin {
@Override
public List<QuerySpec<?>> getQueries() {
return Arrays.asList(new QuerySpec<>(
"my_query",
new Writeable.Reader<MyQueryBuilder>() {
@Override
public MyQueryBuilder read(StreamInput in) throws IOException {return new MyQueryBuilder(in);}
},
new QueryParser<MyQueryBuilder>() {
@Override
public Optional<MyQueryBuilder> fromXContent(QueryParseContext parseContext) throws IOException {return MyQueryBuilder.fromXContent(parseContext);}
})
);
}
}
MyQueryBuilder
はおそらくAbstractQueryBuilder<MyQueryBuilder>
を拡張します:
public class MyQueryPlugin extends Plugin implements SearchPlugin {
@Override public List<QuerySpec<?>> getQueries() {
return Arrays.asList(
new QuerySpec<>("my_query", MyQueryBuilder::new, MyQueryBuilder::fromXContent)
);
}
}
またはこの(Javaの7):
おかげではなく、私のために動作しませんでした:
MyQueryPlugin
はあなたplugin-descriptor.properties
のように参照したいものです。私はElasticsearchコードを検索し、クエリの名前、 'Writeable.Reader'インターフェース、' QueryParser'の3つのパラメータが必要であることがわかりました。 'Writeable.Reader'インターフェースはどこにあるのかわかりません。私は1つまたはそれを作成する必要がありますか?私はElasticsearchのものを使う必要があると思いますが、私はここで失われています。 –オンザフライで作成する必要があります。 'MyQueryBuilder :: new'は実際には' @ FunctionalInterface'のように必要なものに拡張しています。私は非java8の例で答えを編集します。 'QuerySpec'の例は、' org.elasticsearch.search.SearchModule#registerQueryParsers'にたくさんあります。 –
ありがとう、私は問題を解決するために何日も過ごしています。もう一度ありがとう。 –