我回顾了一些我保存的查询,看来我已经设法以三种不同的方式实现了基本相同的查询。它们都返回相同的数据,但哪一个是“正确的”?即,哪一个不包含多余的代码并且性能最佳?
选项1
{
"query":{
"bool":{
"must":[
{
"match":{
"event":"eventname"
}
},
{
"range":{
"@timestamp":{
"gt":"now-70s"
}
}
}
]
}
},
"aggs":{
"myterms":{
"terms":{
"field":"fieldname"
}
}
}
}
选项2
{
"query":{
"filtered":{
"filter":{
"bool":{
"must":[
{
"match":{
"event":"eventname"
}
},
{
"range":{
"@timestamp":{
"gt":"now-70s"
}
}
}
]
}
}
}
},
"aggs":{
"myterms":{
"terms":{
"field":"fieldname"
}
}
}
}
选项3
{
"query":{
"filtered":{
"query":{
"bool":{
"must":[
{
"match":{
"event":"eventname"
}
},
{
"range":{
"@timestamp":{
"gt":"now-70s"
}
}
}
]
}
}
}
},
"aggs":{
"myterms":{
"terms":{
"field":"fieldname"
}
}
}
}
如果我猜测,我会选择选项2,因为其他人看起来他们可能正在运行匹配作为查询。但是关于DSL查询应该采用的正确形式,文档非常令人困惑。
答案 0 :(得分:1)
根据您的评论,我会选择第2个选项,但使用简单的term
过滤器代替match
,而过滤器中不允许使用{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"event": "eventname"
}
},
{
"range": {
"@timestamp": {
"gt": "now-70s"
}
}
}
]
}
}
}
},
"aggs": {
"myterms": {
"terms": {
"field": "event"
}
}
}
}
。
<?php
$myurl = $_SERVER[REQUEST_URI];
if (strpos($myurl, '?') !== false)
{
$myurl = substr($myurl, 0, strpos($myurl, '?'));
}
if ($myurl == "/index.php")
echo '<title>My index title</title>
<meta name="description" content="This is an example of a meta description.">';
else if ($myurl == "/services.php")
echo '<title>My service title</title>
<meta name="description" content="This is an example of a meta description.">';
?>