107.8. 例子
107.8.1. 索引示例 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
以下是一个简单的 INDEX 示例
from("direct:index")
.to("opensearch://opensearch?operation=Index&indexName=twitter");
<route>
<from uri="direct:index"/>
<to uri="opensearch://opensearch?operation=Index&indexName=twitter"/>
</route>
注意
对于此操作,您需要指定一个 indexId 标头。
客户端只需要将包含 映射 的正文消息传递给路由。结果正文包含创建的 indexId。
Map<String, String> map = new HashMap<String, String>();
map.put("content", "test");
String indexId = template.requestBody("direct:index", map, String.class);
107.8.2. 搜索示例 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
搜索特定字段和值使用 Operation 'Search'。传递查询 JSON 字符串或映射
from("direct:search")
.to("opensearch://opensearch?operation=Search&indexName=twitter");
<route>
<from uri="direct:search"/>
<to uri="opensearch://opensearch?operation=Search&indexName=twitter"/>
</route>
String query = "{\"query\":{\"match\":{\"doc.content\":\"new release of ApacheCamel\"}}}";
HitsMetadata<?> response = template.requestBody("direct:search", query, HitsMetadata.class);
使用 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);
使用 OpenSearch scroll api 搜索以获取所有结果。
from("direct:search")
.to("opensearch://opensearch?operation=Search&indexName=twitter&useScroll=true&scrollKeepAliveMs=30000");
<route>
<from uri="direct:search"/>
<to uri="opensearch://opensearch?operation=Search&indexName=twitter&useScroll=true&scrollKeepAliveMs=30000"/>
</route>
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
}
也可以使用分割 EIP。
from("direct:search")
.to("opensearch://opensearch?operation=Search&indexName=twitter&useScroll=true&scrollKeepAliveMs=30000")
.split()
.body()
.streaming()
.to("mock:output")
.end();
107.8.3. MultiSearch 示例 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
MultiSearching on specific field (s)和 value 使用 Operation MultiSearch。传递 MultiSearchRequest 实例
from("direct:multiSearch")
.to("opensearch://opensearch?operation=MultiSearch");
<route>
<from uri="direct:multiSearch"/>
<to uri="opensearch://opensearch?operation=MultiSearch"/>
</route>
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);