当前位置: 首页 > 面试题库 >

如何在elasticsearch中正确编写布尔值或逻辑?

胡翔
2023-03-14
问题内容

我想使用loId=6 AND (actionType = "SAVE_DATA" OR 获取所有文档actionType = "OPEN_SCREEN")

我写错了这个逻辑吗?

为什么我的查询返回0个结果?

注意 :我可以接受查询或过滤器来解决此问题。

这些是一些示例文档:

 {
    "_index": "logs",
    "_type": "record",
    "_id": "eIIt3vtrSxmdOVGClQmN3w",
    "_score": 1,
    "_source": {
       "timestamp": 1373569919000,
       "uid": 6,
       "paId": 56298,
       "loId": 6,
       "prId": 2,
       "vId": 6577,
       "actionType": "SAVE_DATA"
    }
 },
 {
    "_index": "logs",
    "_type": "record",
    "_id": "yQGCia6qRYCImZLyH7DrEA",
    "_score": 1,
    "_source": {
       "timestamp": 1373570314000,
       "uid": 6,
       "paId": 56641,
       "loId": 6,
       "prId": 2,
       "vId": 6578,
       "actionType": "CHECK_IN"
    }
 },
 {
    "_index": "logs",
    "_type": "record",
    "_id": "2raajrNKTKeRKG88wiNPpw",
    "_score": 1,
    "_source": {
       "timestamp": 1373570532000,
       "uid": 6,
       "paId": 56641,
       "loId": 6,
       "prId": 2,
       "vId": 6579,
       "actionType": "LOAD_DATA"
    }
 },
 {
    "_index": "logs",
    "_type": "record",
    "_id": "0FDBxW2ESl6tfmj81YJvIg",
    "_score": 1,
    "_source": {
       "timestamp": 1373570761000,
       "uid": 6,
       "paId": 56298,
       "loId": 6,
       "prId": 2,
       "vId": 6577,
       "actionType": "OPEN_SCREEN"
    }
 },
 {
    "_index": "logs",
    "_type": "record",
    "_id": "-bFQyEdCQVWiXNldtxz04g",
    "_score": 1,
    "_source": {
       "timestamp": 1373570777000,
       "uid": 6,
       "paId": 56298,
       "loId": 6,
       "prId": 2,
       "vId": 6577,
       "actionType": "OPEN_SCREEN"
    }
 }

询问

{
   "query": {
      "filtered": {
          "query": {
              "term": {
                    "loId": 6
              }
          }, 
         "filter": {
            "or": {
               "filters": [
                  {
                     "term": {
                        "actionType": "SAVE_DATA"
                     }
                  },
                  {
                     "term": {
                        "actionType": "OPEN_SCREEN"
                     }
                  }
               ],
               "_cache": false
            }
         }
      }
   }
}

问题答案:

您无法获得结果的主要原因是因为您试图对进行term过滤actionType,这是一个已分析的字段。如果要term对该字段进行匹配,则需要更新类型映射以将该字段设置为not_analyzed。请参见以下示例映射:

{
   "record": {
      "properties": {
         "actionType": {
            "type": "string",
            "index": "not_analyzed",
         },
         "loId": {
            "type": "long"
         },
         "paId": {
            "type": "long"
         },
         "prId": {
            "type": "long"
         },
         "timestamp": {
            "type": "long"
         },
         "uid": {
            "type": "long"
         },
         "vId": {
            "type": "long"
         }
      }
   }
}

从此处开始阅读有关映射的信息:http :
//www.elasticsearch.org/guide/reference/mapping/。您需要重新索引数据。修复该问题后,下面的查询将起作用:

{ 
    "query": { 
        "filtered": {
           "query": {"match_all":{}},
           "filter": {
               "bool": {
                   "must": [
                       {"term": {"loId":6}},
                       {
                           "or": [
                               {"term":{"actionType": "SAVE_DATA"}},
                               {"term":{"actionType": "OPEN_SCREEN"}}
                           ]
                       }
                   ]
               }
           }
        }
    }
}


 类似资料:
  • 问题内容: 我每天要进行几个实验,在Elasticsearch中存储实验的 错误 和 布尔 值(如果结果正确)。现在,我想在图形中显示结果(使用highchart js)。我使用这样的汇总查询来接收每天的汇总错误,包括标准差: 我面临的问题是,我无法像从数据库中获得双重错误一样检索布尔值。当我只是将字段名称更改为 我收到此错误消息: 但是,可以将所有布尔值合计为true,将true设置为1,将fa

  • 我对Bool查询和在elasticsearch中查找精确值有点困惑。具体来说,我有一个title_field和post_field,我想搜索。但是我使用的所有其他字段,因为我想查找它们是否存在或不存在,或者有多少次(如网址或用户名,必须是准确的)。 因此,我可以从文档中看到,我可以对title_字段和post_字段进行多重匹配查询。 但我希望得到确切答复的其他领域呢?我是否执行布尔查询(使用mus

  • 这是我试图实现的:我有ActioBar,我有一个名为登录在ActionBar上的菜单项。当点击这个登录菜单项时,它会在动作栏中添加一个新选项卡,并在父活动的容器中加载带有login_layout的片段。如果我点击任何其他选项卡,登录选项卡就会消失。只有再次点击登录菜单项,它才能重新出现。一旦登录成功,我想将菜单项的标题更改为注销。现在,在将登录菜单项的标题设置为注销后,如果我点击它,它不应该在动作

  • 问题内容: 我在一本书中找到了这段代码,并在Netbeans中执行了它: 我只是不明白为什么这段代码的输出是真实的,任何人都可以启发我,谢谢。 问题答案: 它缺少双等号。因此,它是在做赋值而不是相等比较(请记住,赋值的返回值是新值)。在大多数情况下,大多数类型都不是布尔值,这意味着结果不是布尔值,因此对一条语句而言它是非法的,从而导致编译器错误。但是,由于此处的类型已经是布尔值,因此赋值会导致布尔

  • 问题内容: 我正在做一个简单的游戏,您在屏幕上移动一个球,并尝试避免屏幕上出现其他障碍。 我遇到的问题是,当我尝试评估您是否接触另一个块时,无论我的布尔值等于什么,我的if语句总是返回第一个结果。这是我评估陈述的方法 这是发送 sect 布尔值的代码部分: 这是完整的代码: 请告诉我我在做什么错!!! 谢谢! 问题答案: 你需要 代替 甚至 更好的 办法是使用

  • 问题内容: 最近,我被介绍了node.js以及一些很酷的包,例如express和jade。我有几个问题经常会敲门: 如果选择node.js构建下一个网站,我将使用JavaScript编写服务器端复杂的逻辑吗?但我认为您无法将JavaScript与Java或Python进行比较来编写服务器端代码,因为它们拥有如此众多的库。node.js是真的吗?还是我错过了什么? 我可以从node.js调用Java