Elasticsearch 查询插件
Elasticsearch query plugin
我正在将 Elasticsearch 插件从版本 2.4.0 升级到 5.4.0。这个插件实现了一个自定义查询,但是随着 Elasticsearch Java Api 的新变化,我对如何注册新查询有点困惑。我在 Elasticsearch 网站上搜索,我发现我必须实现 SearchPlugin
接口并覆盖方法 getQueries
但我仍然很困惑,不知道我是怎么做到的。有帮助吗?
你需要这样的东西 (java8):
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):
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>
。大多数其他 ES 提供的查询都扩展了这一点——它们是一个很好的复制来源。
MyQueryBuilder::fromXContent
是引起我注意的另一个变化 -
它应该与 2.x.
中的 org.elasticsearch.index.query.QueryParser#parse(QueryParseContext parseContext)
相同
MyQueryPlugin
是您在 plugin-descriptor.properties
中引用的内容,例如:
description=my-query example
version=1.0.0
name=my-query
java.version=1.8
elasticsearch.version=5.4.0
classname=com.example.MyQueryPlugin
我正在将 Elasticsearch 插件从版本 2.4.0 升级到 5.4.0。这个插件实现了一个自定义查询,但是随着 Elasticsearch Java Api 的新变化,我对如何注册新查询有点困惑。我在 Elasticsearch 网站上搜索,我发现我必须实现 SearchPlugin
接口并覆盖方法 getQueries
但我仍然很困惑,不知道我是怎么做到的。有帮助吗?
你需要这样的东西 (java8):
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):
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>
。大多数其他 ES 提供的查询都扩展了这一点——它们是一个很好的复制来源。
MyQueryBuilder::fromXContent
是引起我注意的另一个变化 -
它应该与 2.x.
org.elasticsearch.index.query.QueryParser#parse(QueryParseContext parseContext)
相同
MyQueryPlugin
是您在 plugin-descriptor.properties
中引用的内容,例如:
description=my-query example
version=1.0.0
name=my-query
java.version=1.8
elasticsearch.version=5.4.0
classname=com.example.MyQueryPlugin