【发布时间】:2015-05-27 21:33:03
【问题描述】:
我目前对弹性查询的结构感到很困惑。让我解释一下我对以下适用于我的模板的含义:
{
"template" : {
"query" : {
"filtered" : {
"query" : {
"bool" : {
"must" : [
{ "match" : {
"user" : "{{param_user}}"
} },
{ "match" : {
"session" : "{{param_session}}"
} },
{ "range" : {
"date" : {
"gte" : "{{param_from}}",
"lte" : "{{param_to}}"
}
} }
]
}
}
}
}
}
}
好的,所以我想在特定时间段内获取用户特定会话的条目。现在,如果您在此链接 http://www.elastic.co/guide/en/elasticsearch/guide/current/combining-filters.html 上查看一下,您可以找到以下查询:
{
"query" : {
"filtered" : {
"filter" : {
"bool" : {
"should" : [
{ "term" : {"price" : 20}},
{ "term" : {"productID" : "XHDK-A-1293-#fJ3"}}
],
"must_not" : {
"term" : {"price" : 30}
}
}
}
}
}
}
在这个例子中,我们在 "filtered" 之后有 "filter" 关键字。但是,如果我将第二个"query" 与示例中的"filter" 交换,我的模板将不再起作用。这真的很违反直觉,我花了很多时间来解决这个问题。还我不理解为什么我们需要把每个滤在单独̶̶{̶ ̶}̶̶即使它们已经被分离由阵列̶s̶y̶n̶t̶a̶x̶.̶ P>
我遇到的另一个问题是我建议匹配几个字段,我可以只输入 smth 之类的:
{
"query" : {
"match" : {
"user" : "{{param_user}}",
"session" : "{{param_session}}"
}
}
}
但似乎我必须使用我不知道的布尔查询,所以我搜索了“弹性多重匹配”但得到了完全不同的东西。
我的问题:我在哪里可以找到如何正确构建查询(像 PEG 一样)?该文档仅提供基本示例,但并未说明我们实际可以做什么以及如何做。
最好的问候, 一月
编辑:好吧,我只是偶然发现我无法将"query" 与"filter" 交换,因为"match" 是查询而不是过滤器。但话说回来"range" 呢?它似乎是一个查询和一个过滤器......是否有一个关键字摘要指定它们可以在哪些上下文中使用?
【问题讨论】:
标签: elasticsearch