在elasticsearch中使用术语时出现分析异常错误

y3bcpkx1  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(365)

我在搜索术语时遇到了一个错误。错误消息是
“[parsing\u exception][terms]未知标记[start\u array]在[activeids]之后,{line=1&col=63}”
活动ID是唯一ID的数组。有点像

const activeIds = [ '157621a1-d892-4f4b-80ca-14feddb837a0',
'd04c5c93-a22c-48c3-a3b0-c79a61bdd923',
'296d40d9-f316-4560-bbc9-001d6f46858b',
'2f8c6c37-588d-4d24-9e69-34b6dd7366c2',
'ba0508dd-0e76-4be8-8b6e-9e938ab4abed',
'ab076ed9-1dd5-4987-8842-15f1b995bc0d',
'ea6b0cff-a64f-4ce3-844e-b36d9f161e6f' ]

let items = await es.search({
        "index": table,
        "body": {
          "from": 0, "size": 25,
          "query": {
            "terms" : {
                "growerId" : { 
                    activeIds
                }
            },
            "bool": {
                "must_not": [ 
                    { "match":  
                        { 
                            "active": false
                        }
                    },
                ],
                "must": [
                            { "query_string" : 
                                { 
                                    "query": searchQuery,
                                    "fields": ["item_name"] 
                                }
                            }
                        ],
                    }
                }
            }
        })

谢谢你的帮助!
编辑:回答这个问题-“预期结果是什么?”?你能详细介绍和分享一些样本数据吗“西山赛尼15小时前”
我会详细说明一下。
1) 总的来说,我正在尝试检索属于活动用户的项目。共有两个表: user 以及 items . 所以我首先运行一个es,它返回包含 { active: true }user table
2) 运行es返回一个我正在调用的id数组 activeIds . 数组看起来像我在示例中已经显示的数组。到目前为止,这是可行的(如果您想查看代码,请告诉我,但是如果我得到了预期的结果,那么我认为我们现在不需要它)
3) 现在我想搜索 items 表,并仅检索包含一个活动ID的项。因此,项目应该如下所示:

4) 预期结果是检索与 growerId 和一个 activeIds . 因此,如果我对“flowers”进行搜索查询,一个预期结果应该如下所示:

[ { _index: 'items-dev',
_type: 'items-dev_type',
_id: 'itemId=fc68dadf-21c8-43c2-98d2-cf574f71f06d',
_score: 11.397207,
_source: 
{ itemId: 'fc68dadf-21c8-43c2-98d2-cf574f71f06d',
'@SequenceNumber': '522268700000000025760905838',
item_name: 'Flowers',
grower_name: 'Uhs',
image: '630b5d6e-566f-4d55-9d31-6421eb2cff87.jpg',
dev: true,
growerId: 'd04c5c93-a22c-48c3-a3b0-c79a61bdd923',
sold_out: true,
'@timestamp': '2018-12-20T16:09:38.742599',
quantity_type: 'Pounds',
active: true,
pending_inventory: 4,
initial_quantity: 5,
price: 10,
item_description: 'Field of flowers' } },

所以这里是 growerId 比赛 activeIds[1] 但是如果我搜索一个非活动用户创建的“隐形”,我会得到:

[ { _index: 'items-dev',
_type: 'items-dev_type',
_id: 'itemId=15200473-93e1-477c-a1a7-0b67831f5351',
_score: 1,
_source: 
{ itemId: '15200473-93e1-477c-a1a7-0b67831f5351',
'@SequenceNumber': '518241400000000004028805117',
item_name: 'Invisible too',
grower_name: 'Field of Greens',
image: '7f37d364-e768-451d-997f-8bb759343300.jpg',
dev: true,
growerId: 'f25040f4-3b8c-4306-9eb5-8b6c9ac58634',
sold_out: false,
'@timestamp': '2018-12-19T20:47:16.128934',
quantity_type: 'Pounds',
pending_inventory: 5,
initial_quantity: 5,
price: 122,
item_description: 'Add' } },

既然 growerId 与中的任何ID都不匹配 activeIds .
5) 使用您帮助的代码,它返回0项。
如果你需要更多细节,请告诉我。我在这方面做得有点太久了:\

chhkpiq4

chhkpiq41#

术语查询接受术语数组,因此术语查询的定义如下:

"terms": {
    "growerId": activeIds
  }

在进行上述更正之后,您还可能面临其他错误。下面是完整的查询,可以帮助您:

{
  "from": 0,
  "size": 25,
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "active": false
          }
        }
      ],
      "must": [
        {
          "query_string": {
            "query": searchQuery,
            "fields": [
              "item_name"
            ]
          }
        },
        {
          "terms": {
            "growerId": activeIds
          }
        }
      ]
    }
  }
}

相关问题