以下ElasticSearch查询导致异常:
没有为[formattedPrice]
注册过滤器
当我只有一个'必须'的术语过滤器时,查询有效,但这显然不是我需要的。在这种情况下,Elastic Search期望使用什么语法?
{
"query":{
"function_score":{
"query":{
"filtered":{
"query":{
"simple_query_string":{
"query":"yelp",
"fields":[
"trackName^10",
"sellerName^2",
"description"
]
}
},
"filter":{
"bool":{
"must":[
{
"terms":{
"averageUserRating":[
"4.5"
]
},
"terms":{
"formattedPrice":[
"free"
]
}
}
],
"should":{
"exists":{
"field":"userRatingCount"
}
}
}
}
}
},
"field_value_factor":{
"field":"userRatingCount",
"modifier":"log1p",
"factor":0.1
}
}
}
}
答案 0 :(得分:4)
问题在于must
部分:它应该是[{},{}...{}]
形式的元素数组,而在您的情况下,您有[{terms,terms}]
。它应该是[{terms},{terms}]
。您缺少一个结束花括号和一个开头花括号:
{
"query": {
"function_score": {
"query": {
"filtered": {
"query": {
"simple_query_string": {
"query": "yelp",
"fields": [
"trackName^10",
"sellerName^2",
"description"
]
}
},
"filter": {
"bool": {
"must": [
{
"terms": {
"averageUserRating": [
"4.5"
]
}
},
{
"terms": {
"formattedPrice": [
"free"
]
}
}
],
"should": {
"exists": {
"field": "userRatingCount"
}
}
}
}
}
},
"field_value_factor": {
"field": "userRatingCount",
"modifier": "log1p",
"factor": 0.1
}
}
}
}