得到 [bool] 格式错误的查询,应为 [END_OBJECT] 但找到 [FIELD_NAME]

Posted

技术标签:

【中文标题】得到 [bool] 格式错误的查询,应为 [END_OBJECT] 但找到 [FIELD_NAME]【英文标题】:getting [bool] malformed query, expected [END_OBJECT] but found [FIELD_NAME] 【发布时间】:2022-01-14 07:19:04 【问题描述】:

我在 elasticsearch 查询中使用嵌套以及排序。当我在没有排序查询的情况下执行时,但是当我包含排序时,它会给出消息 [bool] 格式错误的查询,预期 [END_OBJECT] 但找到 [FIELD_NAME]。我正在用 python 构建这个查询。提前致谢。

    query = 
            'bool': 
            'should': [
                'nested': 
                    'path': 'profile.summay',
                    'query': 
                        'query_string': 
                            'query': 'machine learning',
                            'fields': ['profile.summay.desc'],
                            'default_operator': "AND"
                            
                    
                ,
                'nested': 
                    'path': 'internal.summary',
                    'query': 
                        'query_string': 
                            'query': 'machine learning',
                            'fields': ['internal.summary.desc'],
                            'default_operator': "AND"
                        
                    
                
            ]
        ,
        "sort": [
            
                'profile.summary.date':
                        'order' : 'asc',
                        "nested":  "path": "profile.summary" 
                
            
        ]
    

from elasticsearch import Elasticsearch
es_client = Elasticsearch(['some aws url'])
response = es_client.search(index=index_name, query=query)

【问题讨论】:

【参考方案1】:

TLDR;

你的sort 放错了。


  "query": 
    "bool": 
      "should": [
        
          "nested": 
            "path": "profile.summay",
            "query": 
              "query_string": 
                "query": "machine learning",
                "fields": ["profile.summay.desc"],
                "default_operator": "AND"
              
            
          
        ,
        
          "nested": 
            "path": "internal.summary",
            "query": 
              "query_string": 
                "query": "machine learning",
                "fields": ["internal.summary.desc"],
                "default_operator": "AND"
              
            
          
        
      ]
    
  ,
  "sort": [
    
      "profile.summary.date": 
        "order": "asc",
        "nested":  "path": "profile.summary" 
      
    
  ]

根据文档[doc],sort 键需要与query 键处于相同深度。没有更深的层次。

你的代码需要从


  "query": 
    ... query,
    
    "sort": [
      ... sort
    ]
  

收件人:


  "query": 
    ... query
  ,
  "sort": [
    ... sort
  ]

【讨论】:

我也尝试过这种方式,但出现“RequestError(400, 'parsing_exception', 'no [query] registered for [query]')”错误。在我使用 python 构建查询和传递与我在问题中发布的相同之间。 啊,我更明白为什么您的查询格式感觉不对。 (1)反驳我对您的问题的编辑,(2)查看您正在调用的python函数的文档,它们必须是排序no的另一个参数? 你使用什么库?也许发布你的代码的 sn-p 我已经编辑了包含lib信息和代码sn-p的问题

以上是关于得到 [bool] 格式错误的查询,应为 [END_OBJECT] 但找到 [FIELD_NAME]的主要内容,如果未能解决你的问题,请参考以下文章

Ionic Braintree 插件错误:应为“/* Begin”、“/* End”、“\”或 [A-Za-z0-9_.] 但找到“/”

反应本机错误!元素类型无效:应为字符串或类/函数,但得到:未定义

如果状态为真,则 Elasticsearch bool 查询按日期排序

订阅私人频道时的 Pusher/Laravel 回显错误:订阅频道的身份验证值无效:格式应为“密钥:签名”

此表达式具有 bool 类型,但表达式应为 unit 类型,因为它是没有 else 分支的条件的结果

访问 VBA 错误“参数太少。应为 1”