【发布时间】:2019-09-20 23:08:15
【问题描述】:
我有一个movies ES 索引,其映射如下:
{
"doc": {
"properties": {
"director": {
"type": "text"
},
"genres": {
"type": "text",
"index": "false"
},
"title": {
"type": "text"
},
"year": {
"type": "long"
}
}
}
}
对于流派,我将提交一个字符串数组。现在,我想允许我的客户针对我的端点提交一个查询,在那里我将 q 请求参数代理到 ES 客户端。
但我正在努力使用 URI 搜索过滤数据,就像通过提交查询作为针对我的索引的有效负载来实现的一样。例如:
GET movies/doc/_search
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"term": {
"genres": "War"
}
}
],
"must": [
{
"term": {
"genres": "Foo"
}
}
],
"must": [
{
"term": {
"genres": "Bar"
}
}
]
}
}
}
}
}
是否可以通过 URI 搜索来实现?如果有,怎么做?
【问题讨论】:
-
为什么要使用 URI 搜索?有什么具体原因吗?
-
坦率地说,在 Get 上提交有效载荷不是很 Rest-y,如果有办法避免它,我会走那条路
-
此外,我们正在构建一个基于任务的 UI,其中 UI 将针对由 ES 后端支持的 API 发出请求。因此,对于前端工程师来说,构建这样的查询将花费太多精力。而且我不想暴露很多 ES 的复杂性
-
您可以根据客户端请求在后端构建 DSL 查询。 URI 搜索不支持 DSL 查询的所有功能。
-
这是一个好点。但我希望有人确认这是实现这一目标的唯一方法。
标签: elasticsearch