Mis*_*iev 3 rest elasticsearch
怎么可能同时拥有query_string并range在相同的查询?
我发送给/myindex/mytype/_search/?search_type=count:
{"query": {"query_string": {"query": "field1:value1"},
"range": {"time": {"gt": "2014-11-01T00:00:00Z",
"lte": "2014-11-01T03:00:00Z"}}},
"aggs": {"counts": {"date_histogram": {"field": "time",
"interval": "minute"}}}}
Run Code Online (Sandbox Code Playgroud)
但ES给了我这个错误:
ElasticsearchParseException[Expected field name but got START_OBJECT \"range\"];
Run Code Online (Sandbox Code Playgroud)
如果我删除range或者query_string,它工作得很好,但没有太多需要的过滤:)
根据您的说法,您似乎希望组合多个查询以减少计算聚合的范围.
首先,这可以使用bool查询(文档)来实现,该查询允许您决定文档是否必须匹配两个查询(请参阅must子句)或至少一个查询(请参阅should子句).
假设您希望结果文档与两个查询匹配,语法将为:
{
"query": {
"bool": {
"must": [
{
"query_string": {
...
}
},
{
"range": {
...
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将有效,但这不是查询的最佳方式.它可以优化,因为您的range查询具有等效的过滤器.
使用过滤器版本通常会更快,因为它将跳过分数计算,并将达到大多数过滤器类型的缓存(有关查询和过滤器之间差异的更多信息).
但是,过滤器不能直接在query属性中使用,您必须将其包装在filtered具有两个属性的查询中:
query :要过滤的查询filter :与您的查询结合使用的过滤器最后,你将有一个像这样的查询:
{
"query": {
"filtered": {
"query": {
"query_string": {
"query": "field1:value1"
}
},
"filter": {
"range": {
"time": {
"gt": "2014-11-01T00:00:00Z",
"lte": "2014-11-01T03:00:00Z"
}
}
}
}
},
"aggs": {
"counts": {
"date_histogram": {
"field": "time",
"interval": "minute"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我相信,你想要这样的东西:
{
"query": {
"bool": {
"must": [
{
"range": {
"time": {
"gt": "2014-11-01T00:00:00Z",
"lte": "2014-11-01T03:00:00Z"
}
}
},
{
"query_string": {
"query": "field1:value1"
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
Elasticsearch 似乎不允许您在单个“查询”标签下将多个事物链接在一起。
(抱歉格式化,我不能让{看起来漂亮和排队。)
| 归档时间: |
|
| 查看次数: |
2502 次 |
| 最近记录: |