如何解决Elasticsearch 字符串匹配查询中的多个字段
我正在尝试查询我的 Elastic Search 数据库并匹配多个字段,但是,我得到:
[匹配] 格式错误的查询,预期为 [END_OBJECT],但找到了 [FIELD_NAME]
这很奇怪,因为我肯定必须能够使用 match
和我的字段名称来匹配某些文本,对吗?
我尝试查询的字段在我的 data
对象内,这是自定义的,并且由于在此处添加(点)不起作用,我将其包装起来,我的数据:>
{
"_index": "my_table","_type": "_doc","_id": "IVnGuXcBt3ZsPNCw23Eg","_version": 1,"_seq_no": 0,"_primary_term": 1,"found": true,"_source": {
"mappings": {
"properties": {
"period_from": {
"type": "date","format": "yyyy-MM-dd HH:mm:ss","fielddata": true
},"period_to": {
"type": "date","created_at": {
"type": "date","updated_at": {
"type": "date","fielddata": true
}
}
},"data": {
"dataset": "events","event_category": "test1","event_action": "test2","event_count": "199","period_from": "2021-02-19 00:02:00","period_to": "2021-02-19 10:02:29","created_at": "2021-02-19 10:02:79","updated_at": "2021-02-19 10:02:79"
},"created_at": "2021-02-19 10:02:18","updated_at": "2021-02-19 10:02:18"
}
}
我在这里遗漏了什么:
events = await elastic.find('my_table',{
query: {
match: {
'data.event_category': 'test1'
},match: {
'data.event_action': 'test2'
},range: {
period_from: {
gte: moment(from).format('YYYY-MM-DD HH:MM:SS')
},period_to: {
lte: moment(to).format('YYYY-MM-DD HH:MM:SS')
}
}
}
})
解决方法
correctly 设置日期字段的映射后,请使用:
{
query: {
bool: {
must: [
{
match: {
"data.event_action": "test2"
}
},{
range: {
period_from: {
gte: moment(from).format('YYYY-MM-DD HH:MM:SS')
}
}
},{
range: {
period_to: {
lte: moment(to).format('YYYY-MM-DD HH:MM:SS')
}
}
}
]
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。