zoukankan      html  css  js  c++  java
  • ElasticSearch搜索term和terms的区别

    今天同事使用ES查询印地语的文章。发现查询报错,查询语句和错误信息如下:

    查询语句:
    {
        "query":{
            "bool":{
                "must":[
                    {
                        "range":{
                            "update_time":{
                                "gt":"1488556800000"
                            }
                        }
                    },
                    {
                        "terms":{
                            "lang":1
                        }
                    },
                    {
                        "terms":{
                            "domain":[
                                "dailymasala.co",
                                "goldenmob.com"
                            ]
                        }
                    },
                    {
                        "prefix":{
                            "user_id":"errVideo_setInterval_"
                        }
                    }
                ]
            }
        },
        "from":0,
        "size":10
    }


    错误信息:
    {
        "error":{
            "root_cause":[
                {
                    "type":"parsing_exception",
                    "reason":"[terms] query does not support [lang]",
                    "line":1,
                    "col":93
                }
            ],
            "type":"parsing_exception",
            "reason":"[terms] query does not support [lang]",
            "line":1,
            "col":93
        },
        "status":400
    }

    其实这么看上去好像并没有什么问题,但是就是查询不成功。

    问题出在查询lang这个字段上。

    在查询的字段只有一个值的时候,应该使用term而不是terms,在查询字段包含多个的时候才使用terms(类似于sql中的in、or),使用terms语法,JSON中必须包含数组。

    正确的写法如下:

    第一种(单个值,term):
    {
        "query":{
            "bool":{
                "must":[
                    {
                        "range":{
                            "update_time":{
                                "gt":"1488556800000"
                            }
                        }
                    },
                    {
                        "term":{
                            "lang":1
                        }
                    },
                    {
                        "terms":{
                            "domain":[
                                "dailymasala.co",
                                "goldenmob.com"
                            ]
                        }
                    },
                    {
                        "prefix":{
                            "user_id":"errVideo_setInterval_"
                        }
                    }
                ]
            }
        },
        "from":0,
        "size":10
    }
    
    
    
    第二种(数组形式,terms):
    {
      "query": {
        "bool": {
          "must": [
            {
              "range": {
                "update_time": {
                  "gt": "1488556800000"
                }
              }
            },
            {
              "terms": {
                "lang": [1]
              }
            },
            {
              "terms": {
                "domain": [
                  "dailymasala.co",
                  "goldenmob.com"
                ]
              }
            },
            {
              "prefix": {
                "user_id": "errVideo_setInterval_"
              }
            }
          ]
        }
      },
      "from": 0,
      "size": 10
    }
  • 相关阅读:
    django框架——十二
    django框架——十一
    请简述一下你所了解的数据源控件有哪些
    在ASP.NET中,<%= %>和<%# %>有什么区别
    请解释ASP.NET中的web页面与其隐藏类之间的关系
    什么是viewstate,能否禁用?是否所用控件都可以禁用
    WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用
    静态类和静态方法的好处
    请写出在ASP.NET中常用的几种页面间传值的方法,并说出它们的特点。
    连接数据库主要有哪几个对象
  • 原文地址:https://www.cnblogs.com/0xcafedaddy/p/6522984.html
Copyright © 2011-2022 走看看