json - 针对不同类别的弹性搜索过滤器
问题描述
我用三个字段做了一个简单的映射,我正在分析一个字段是文本类型,其他字段是关键字类型。例子
fields: Category_one, Category_two, Category_three.
现在我正在搜索文件。
Get _search/cat
{
"size": 4,
"query": {
"match": {
"Category_one.ngrams": {
"query": "Nice food place in XYZ location",
"analyzer": "standard"
}
},
"aggs":{
"distincr_values":{
"terms": {
"fields" : "Category_two"
}
}
}
}
}
它显示了这个错误
{
"error": {
"root_cause": [
{
"type": "parsing_exception",
"reason": "[match] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
"line": 10,
"col": 5
}
],
"type": "parsing_exception",
"reason": "[match] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
"line": 10,
"col": 5
},
"status": 400
}
请帮我解决这个错误。我的主要动机是根据Category_two
领域找到不同的搜索。
任何帮助,将不胜感激。
解决方案
我相信由于您的查询结构,您会收到此错误。您的聚合关键字必须在查询之外(与查询相同级别)。目前,您的 aggs 已包含在查询中。
按照这个结构:
Get _search/cat
{
"size": 4,
"query": {
'query goes here'
},
"aggs":{
'aggregation go here'
}
}
推荐阅读
- createjs - Adobe Animate CC Canvas (CreateJS) 矢量图形在放大时变得模糊
- django - 将文件输入用于文本字段?
- spring - 如何读取 Spring Batch 中不符合块区域条件的记录?
- excel - 如何在VBA循环中删除除A列之外的整行?
- loops - 用户输入未在文本下方打印
- c++ - 将包含数字的数组作为参数传递 c++
- ios - iOS / Swift无法将文件写入将文件路径视为目录路径
- php - 使用 PHP 连接到 vCenter REST API
- r - R - 在没有替换的情况下对时间序列中的连续日期序列进行采样?
- typescript - 打字稿条件验证取决于字段可空性