109.8. 例子


109.8.1. 索引示例

以下是一个简单的 INDEX 示例

from("direct:index")
  .to("opensearch://opensearch?operation=Index&indexName=twitter");
Copy to Clipboard Toggle word wrap
<route>
    <from uri="direct:index"/>
    <to uri="opensearch://opensearch?operation=Index&amp;indexName=twitter"/>
</route>
Copy to Clipboard Toggle word wrap
注意

对于此操作,您需要指定一个 indexId 标头。

客户端只需要将包含 映射 的正文消息传递给路由。结果正文包含创建的 indexId

Map<String, String> map = new HashMap<String, String>();
map.put("content", "test");
String indexId = template.requestBody("direct:index", map, String.class);
Copy to Clipboard Toggle word wrap

109.8.2. 搜索示例

搜索特定字段和值使用 Operation 'Search'。传递查询 JSON 字符串或映射

from("direct:search")
  .to("opensearch://opensearch?operation=Search&indexName=twitter");
Copy to Clipboard Toggle word wrap
<route>
    <from uri="direct:search"/>
    <to uri="opensearch://opensearch?operation=Search&amp;indexName=twitter"/>
</route>
Copy to Clipboard Toggle word wrap
String query = "{\"query\":{\"match\":{\"doc.content\":\"new release of ApacheCamel\"}}}";
HitsMetadata<?> response = template.requestBody("direct:search", query, HitsMetadata.class);
Copy to Clipboard Toggle word wrap

使用 Map 搜索特定字段。

Map<String, Object> actualQuery = new HashMap<>();
actualQuery.put("doc.content", "new release of ApacheCamel");

Map<String, Object> match = new HashMap<>();
match.put("match", actualQuery);

Map<String, Object> query = new HashMap<>();
query.put("query", match);
HitsMetadata<?> response = template.requestBody("direct:search", query, HitsMetadata.class);
Copy to Clipboard Toggle word wrap

使用 OpenSearch scroll api 搜索以获取所有结果。

from("direct:search")
  .to("opensearch://opensearch?operation=Search&indexName=twitter&useScroll=true&scrollKeepAliveMs=30000");
Copy to Clipboard Toggle word wrap
<route>
    <from uri="direct:search"/>
    <to uri="opensearch://opensearch?operation=Search&amp;indexName=twitter&amp;useScroll=true&amp;scrollKeepAliveMs=30000"/>
</route>
Copy to Clipboard Toggle word wrap
String query = "{\"query\":{\"match\":{\"doc.content\":\"new release of ApacheCamel\"}}}";
try (OpenSearchScrollRequestIterator response = template.requestBody("direct:search", query, OpenSearchScrollRequestIterator.class)) {
    // do something smart with results
}
Copy to Clipboard Toggle word wrap

也可以使用分割 EIP

from("direct:search")
  .to("opensearch://opensearch?operation=Search&indexName=twitter&useScroll=true&scrollKeepAliveMs=30000")
  .split()
  .body()
  .streaming()
  .to("mock:output")
  .end();
Copy to Clipboard Toggle word wrap

109.8.3. MultiSearch 示例

MultiSearching on specific field (s)和 value 使用 Operation MultiSearch。传递 MultiSearchRequest 实例

from("direct:multiSearch")
  .to("opensearch://opensearch?operation=MultiSearch");
Copy to Clipboard Toggle word wrap
<route>
    <from uri="direct:multiSearch"/>
    <to uri="opensearch://opensearch?operation=MultiSearch"/>
</route>
Copy to Clipboard Toggle word wrap

MultiSearch on specific field (s)

MsearchRequest.Builder builder = new MsearchRequest.Builder().index("twitter").searches(
        new RequestItem.Builder().header(new MultisearchHeader.Builder().build())
                .body(new MultisearchBody.Builder().query(b -> b.matchAll(x -> x)).build()).build(),
        new RequestItem.Builder().header(new MultisearchHeader.Builder().build())
                .body(new MultisearchBody.Builder().query(b -> b.matchAll(x -> x)).build()).build());
List<MultiSearchResponseItem<?>> response = template.requestBody("direct:multiSearch", builder, List.class);
Copy to Clipboard Toggle word wrap
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部