Построение FunctionScoreQuery с использованием NEST QueryContainer

#elasticsearch #nest

#эластичный поиск #гнездо

Вопрос:

Я хочу построить запрос, эквивалентный следующему JSON

 {  "function_score": {  "script_score": {  "script": "doc['some-field'].value"  }  } }  

Однако, когда я использую следующий код

 var q = new FunctionScoreQuery {  Query = new ScriptScoreQuery  {  Script = new InlineScript($"doc['some-field'].value"),  IsVerbatim = true,  },  IsVerbatim = true };  

Это становится

 {  "function_score": {  "query": {  "script_score": {  "script": "doc['some-field'].value"  }  }  } }  

который я отправляю в экземпляр ES, и он получает ошибку. Я проверил FunctionScoreQuery и не нашел, куда его положить ScriptScoreQuery . Так могу ли я получить то, что хочу?

Ответ №1:

Я выясняю, что то, чего я хочу, эквивалентно

 {  "function_score": {  "functions": [  {  "script_score": {  "script": {  "source": "doc['some-field'].value"  }  }  }  ]  } }  

Поэтому я использую

 var q = new FunctionScoreQuery {  Functions = new Listlt;IScoreFunctiongt;  {  new ScriptScoreFunction  {  Script = new InlineScript($"doc['some-field'].value"),  }  }, }  

чтобы построить запрос и получить то, что я хочу.