2014-09-18 4 views
0

Я пытаюсь rescore моих результатов запроса с помощью вложенного запроса, но я получаю следующее исключение, которое я считаю, означает, что rescore не поддерживает вложенные запросы:Поддерживает ли поддерживаемые вложенные запросы поддержку rescore?

nested: ElasticsearchIllegalArgumentException[rescore doesn't support [path]]; 

это так?

Вложенные объекты содержат поле ключа, которое должно быть сопоставлено, и поле веса, которое должно использоваться как оценка. Вот запрос:

POST myindex/_search 
{ 
"query" : { 
    "match" : { 
     "field1" : { 
      "query" : "my_query_string", 
      "type" : "boolean" 
     } 
    } 
}, 
"rescore" : { 
    "window_size" : 50, 
    "query": { 
     "nested": { 
     "path": "path.to.nested.object", 
     "score_mode" : "avg", 
     "query": { 
      "function_score": { 
      "query":{ 
       "constant_score": { 
       "query": { 
        "match": { 
        "path.to.nested.object.key": "my_query_string" 
        } 
       } 
       } 
      }, 
      "script_score": { 
       "script": "doc['path.to.nested.object.weight'].value" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

ответ

2

Существует ошибка синтаксиса в запросе с рецидивами баллов вам нужно использовать rescore_query поскольку query_rescorer является единственной реализацией поддерживается в данный момент.

должно работать:

POST myindex/_search 
{ 
    "query": { 
     "match": { 
     "field1": { 
      "query": "my_query_string", 
      "type": "boolean" 
     } 
     } 
    }, 
    "rescore": { 
     "window_size": 50, 
     "query": { 
     "rescore_query": { 
      "nested": { 
       "path": "path.to.nested.object", 
       "score_mode": "avg", 
       "query": { 
        "function_score": { 
        "query": { 
         "constant_score": { 
          "query": { 
           "match": { 
           "path.to.nested.object.key": "my_query_string" 
           } 
          } 
         } 
        }, 
        "script_score": { 
         "script": "doc['path.to.nested.object.weight'].value" 
        } 
        } 
       } 
      } 
     } 
     } 
    } 
} 
+0

Он отлично делает, благодаря @keety! – kevad

+0

Для записи: с использованием API-интерфейса python это отражается в том, что атрибут rescore для Query.search принимает объект pyes.query.Search, а не pyes.query.RescoreQuery. – kevad

Смежные вопросы