我在代码中构建了以下搜索,其想法是过滤掉匹配集然后查询,这样我就可以根据某些字段添加分数。由于某种原因,过滤器部分工作,但无论我在查询中放置什么(即在下面我没有索引sdfsdfsdf)它仍然返回与过滤器匹配的任何内容。
语法错了吗?
{
"query":{
"filtered":{
"query":{
"bool":{
"must":{
"match":{
"sdfsdfsdf":{
"query":"4",
"boost":2.0
}
}
}
},
"filter":{
"bool":{
"must":[
{
"terms":{
"_id":[
"55f93ead5df34f1900abc20b",
"55f8ab0226ec4bb216d7c938",
"55dc4e949dcf833308c63d6b"
]
}
},
{
"range":{
"published_date":{
"lte":"now"
}
}
}
],
"must_not":{
"terms":{
"_id":[
"55f0a799acccc28204a5058c"
]
}
}
}
}
}
}
}
}
答案 0 :(得分:1)
您的filter
未达到正确的级别。它不应该在query
内,而应与query
相同,如下所示:
{
"query": {
"filtered": {
"query": { <--- query and filter at the same level
"bool": {
"must": {
"match": {
"sdfsdfsdf": {
"query": "4",
"boost": 2
}
}
}
}
},
"filter": { <--- query and filter at the same level
"bool": {
"must": [
{
"terms": {
"_id": [
"55f93ead5df34f1900abc20b",
"55f8ab0226ec4bb216d7c938",
"55dc4e949dcf833308c63d6b"
]
}
},
{
"range": {
"published_date": {
"lte": "now"
}
}
}
],
"must_not": {
"terms": {
"_id": [
"55f0a799acccc28204a5058c"
]
}
}
}
}
}
}
}
答案 1 :(得分:0)
您需要将sdfsdfsdf
替换为您的类型中的现有字段名称,例如title
,否则我认为它将回退到match_all查询。
"match":{
"title":{
"query": "some text here",
"boost":2.0
}
}