如何在 Elasticsearch 的同一查询中使用 `gt` 和 `fields`
How to make use of `gt` and `fields` in the same query in Elasticsearch
在我的 中,有人向我介绍了 query_string
查询中的 fields
以及它如何帮助我搜索文档的嵌套字段。
{
"query": {
"query_string": {
"fields": ["*.id","id"],
"query": "2"
}
}
}
但是它只对匹配有效,如果我想做一些比较怎么办?经过一些阅读和测试,range
之类的查询似乎不支持 fields
。有什么办法可以执行 range
查询,例如在日期上,在可以分散在文档层次结构中任何位置的字段上?
即考虑以下文件:
{
"id" : 1,
"Comment" : "Comment 1",
"date" : "2016-08-16T15:22:36.967489",
"Reply" : [ {
"id" : 2,
"Comment" : "Inner comment",
"date" : "2016-08-16T16:22:36.967489"
} ]
}
是否有查询在 date
字段(如 date > '2016-08-16T16:00:00.000000'
)上搜索匹配给定文档,因为嵌套字段,没有明确给出 Reply.date
地址?像这样(我知道下面的查询是不正确的):
{
"query": {
"range" : {
"date" : {
"gte" : "2016-08-16T16:00:00.000000",
},
"fields": ["date", "*.date"]
}
}
}
range
查询本身不支持它,但是,您可以(再次)利用 query_string
查询以及您可以使用通配符字段并支持范围查询的事实实现您的需求:
{
"query": {
"query_string": {
"query": "\*date:[2016-08-16T16:00:00.000Z TO *]"
}
}
}
以上查询将 return 您的文档,因为 Reply.date
匹配 *date
在我的 query_string
查询中的 fields
以及它如何帮助我搜索文档的嵌套字段。
{
"query": {
"query_string": {
"fields": ["*.id","id"],
"query": "2"
}
}
}
但是它只对匹配有效,如果我想做一些比较怎么办?经过一些阅读和测试,range
之类的查询似乎不支持 fields
。有什么办法可以执行 range
查询,例如在日期上,在可以分散在文档层次结构中任何位置的字段上?
即考虑以下文件:
{
"id" : 1,
"Comment" : "Comment 1",
"date" : "2016-08-16T15:22:36.967489",
"Reply" : [ {
"id" : 2,
"Comment" : "Inner comment",
"date" : "2016-08-16T16:22:36.967489"
} ]
}
是否有查询在 date
字段(如 date > '2016-08-16T16:00:00.000000'
)上搜索匹配给定文档,因为嵌套字段,没有明确给出 Reply.date
地址?像这样(我知道下面的查询是不正确的):
{
"query": {
"range" : {
"date" : {
"gte" : "2016-08-16T16:00:00.000000",
},
"fields": ["date", "*.date"]
}
}
}
range
查询本身不支持它,但是,您可以(再次)利用 query_string
查询以及您可以使用通配符字段并支持范围查询的事实实现您的需求:
{
"query": {
"query_string": {
"query": "\*date:[2016-08-16T16:00:00.000Z TO *]"
}
}
}
以上查询将 return 您的文档,因为 Reply.date
匹配 *date